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

时间:2015-11-30 20:14:48

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

当用户在触摸屏设备上时,我想限制对角线滚动 - 因此我们的想法是强制一次向一个方向滚动 - 水平或垂直。

我已经设置了一个JS小提琴,可以检测是否启用了触摸滚动,并且我能够输出x和y坐标。但我没有看到偏移或任何东西,我想要计算预期的方向。

我知道苹果使用的directionalLockEnabled会限制,所以我想知道Kendo中是否有这样的东西。如果没有,也许我可以找出用户想要滚动的方向并“冻结”其他坐标。

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

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

(相关代码仅适用于触摸...但如果您在开发工具中启用移动模拟,则应该有效)

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

1 个答案:

答案 0 :(得分:3)

如果您想使用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;
    });

对于车轮设备,比较delta

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