javascript - 限制 Kendo Grid 在触摸屏上一次向一个方向滚动

标签 javascript jquery kendo-ui kendo-grid kendo-mobile

当用户使用触摸屏设备时,我想限制对 Angular 线滚动 - 所以我的想法是强制一次向一个方向滚动 - 水平或垂直。

我已经设置了一个 JS Fiddle 来检测是否启用了触摸滚动,并且我能够输出 x 和 y 坐标。但我没有看到偏移量或任何东西,我认为我需要它来计算预期方向。

我知道 apple 使用 directionalLockEnabled 来限制,所以我想知道 Kendo 中是否有类似的功能。如果没有,也许有一种方法可以弄清楚用户打算向哪个方向滚动并“卡住”另一个坐标。

我创建的 JS fiddle (dataBound 方法中的相关部分):

http://jsfiddle.net/dmathisen/tskebcqp/

(相关代码仅适用于触摸...但如果您在开发工具中启用移动仿真则应该可以使用)

另一个问题是触发滚动事件的次数。工作时,也许我可以设置一个去抖动来处理触发的频率。

最佳答案

如果您想使用 javascript 进行此修复,您可以计算 X 和 Y 移动的范围。 对于触摸设备,在touchstart时设置起始位置X和Y,并在touchmove时计算距离

    var touchY = touchX = 0;
    $(document).delegate('.yourWrap', 'touchstart', function(e){
        touchX = e.originalEvent.touches[0].pageX;
        touchY = e.originalEvent.touches[0].pageY;
    });
    $(document).delegate('.yourWrap', 'touchmove', function(e){

        if (Math.abs(touchX - e.originalEvent.touches[0].pageX) 
            > Math.abs(touchY - e.originalEvent.touches[0].pageY)) {
            // Block overflow-y
        } else {
            // Block overflow-x
        }
        touchX = e.originalEvent.touches[0].pageX;
        touchY = e.originalEvent.touches[0].pageY;
    });

对于wheel设备,比较delta

(e.wheelDeltaY/3 || -e.deltaY)
(e.wheelDeltaX/3 || -e.deltaX)

关于javascript - 限制 Kendo Grid 在触摸屏上一次向一个方向滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34007169/

相关文章:

javascript - 如何给图像一个最大高度但保持纵横比?

c# - 在 Kendo 窗口弹出窗口上禁用 Esc 键

angularjs - Kendo MultiSelect ngmodel 更新

javascript - 打开终端并通过 JS/NodeJS 执行 CLI 命令

javascript - 使用 Linkedin javascript 身份验证时本地主机来源无效

javascript - 通过动态字段中的动态复选框复制地址

javascript - 从 ajax 加载的元素中检测 .click()

javascript - Google Apps onEdit 事件 - event.source 未定义

javascript - 带有标签的 Highcharts 错误

javascript - 自定义编辑弹出模板中的 Kendo Scheduler 附加按钮