5

我有 jquery 工具滚动器...我喜欢它只为 swipeLeft swipeRight 实现触摸选项。

当我使用 touch: true 时,它​​也会在向上/向下滑动时旋转..

我在这里按照说明进行操作:

jQuery Tools Scrollable on touch 禁用垂直滚动

和这里:

http://awardwinningfjords.com/2010/09/22/handling-touch-events-in-jquery-tools-scrollable.html

但似乎没有一个工作..有什么想法吗?我的小提琴/演示如下供参考

小提琴:http: //jsfiddle.net/mmp2m/7/

演示:http: //jsfiddle.net/mmp2m/7/show

谢谢

4

2 回答 2

5

如果您使用的唯一控件是Scrollable,那么您可以从此处编辑它的源代码以修复该行为或根据您认为合适的方式对其进行调整。

我修改了您发布的小提琴,以在代码部分中包含Scrollable控件的JavaScript代码。

// added在控件代码中添加的行是以下代码段末尾带有注释的行:

    // touch event
    if (conf.touch) {
        var touch = {};

        itemWrap[0].ontouchstart = function(e) {
            var t = e.touches[0];
            touch.x = t.clientX;
            touch.y = t.clientY;
        };

        itemWrap[0].ontouchmove = function(e) {

            // only deal with one finger
            if (e.touches.length == 1 && !itemWrap.is(":animated")) {            
                var t = e.touches[0],
                     deltaX = touch.x - t.clientX,
                     deltaY = touch.y - t.clientY,
                     absX = Math.abs(deltaX),                              // added
                     absY = Math.abs(deltaY);                              // added

                // Only consider the event when the delta in the
                // desired axis is greater than the one in the other.
                if(vertical && absY > absX || !vertical && absX > absY)    // added
                    self[vertical && deltaY > 0 || !vertical && deltaX > 0 ? 'next' : 'prev']();

                e.preventDefault();
            }
        };
    }

我已经在 Android 中使用本机和 Opera 浏览器进行了尝试,并且似乎可以按预期工作。

于 2012-08-13T19:44:42.403 回答
0

我在同一问题上苦苦挣扎了一段时间,直到找到以下解决方法-

初始化-

var $scroller1 = $('#outer-container1').kinetic({'y':false});

这可以防止容器上的垂直滚动,但不会将垂直滚动交给浏览器滚动条。

然后转到jquery kinetic 源代码并注释掉e.preventDefault()所有鼠标和滚动动作事件。

这个黑客对我有用。 https://github.com/davetayls/jquery.kinetic/issues/33

于 2015-07-10T02:27:04.307 回答