只有 swipeone 可以与 jGestures 配合使用

2024-01-12

我正在尝试使用 jGestures 实现触摸事件。 swipeone 工作正常,但其他任何东西(向左滑动、向右滑动等)都不会触发。

<div id="wrap" style="height:500px; width:500px; background: blue;">

    </div>
    <script type="text/javascript">
        $('#wrap').bind('swipeleft', function(){
            alert("test");
        });
    </script>

这只是我做的一个测试页。它实际上在我的主要项目中的某个时刻工作过,但似乎毫无原因地停止了,即使我恢复到旧版本也是如此。我尝试过不同版本的 jGestures,但没有成功。


SwipeLeft、SwipeRight、-Up 和 -Down 的实施效果不佳。仅当您完全停留在开始触摸事件的轴上时,它们才会被触发。 例如,仅当您的手指从 (X,Y) (120, 0) 移动到 (250, 0) 时,SwipeRight 才会起作用。

如果起点和终点的 Y 坐标不同,则它将不起作用。

jGestures.js(约第 1095 行)应该看起来像这样(可读):

/**
 * U Up, LU LeftUp, RU RightUp, etc.
 * 
 *  \U|U/
 * LU\|/RU
 *L---+---R
 * LD/|\RD
 *  /D|D\
 *
 */
if ( _bHasTouches && _bHasMoved === true && _bHasSwipeGesture===true) {
    _bIsSwipe = true;
    var deltaX = _oDetails.delta[0].lastX;
    var deltaY = _oDetails.delta[0].lastY;
    var hor = ver = '';
    if (deltaX > 0) { // right
        hor = 'right';
        if (deltaY > 0) {
            ver = 'down'
        } else {
            ver = 'up';
        }

        if (Math.abs(deltaY) < deltaX * 0.3) {
            ver = '';
        } else if (Math.abs(deltaY) >= deltaX * 2.2) {
            hor = '';
        }
    } else { // left
        hor = 'left';
        if (deltaY > 0) {
            ver = 'down'
        } else {
            ver = 'up';
        }

        if (Math.abs(deltaY) < Math.abs(deltaX) * 0.3) {
            ver = '';
        } else if (Math.abs(deltaY) > Math.abs(deltaX) * 2.2) {
            hor = '';
        }
    }
    // (_oDetails.delta[0].lastX < 0) -> 'left'
    // (_oDetails.delta[0].lastY > 0) -> 'down'
    // (_oDetails.delta[0].lastY < 0) -> 'up'
    // alert('function swipe_' + hor + '_' + ver);

    _oDetails.type = ['swipe', hor, ver].join('');
    _$element.triggerHandler(_oDetails.type, _oDetails);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

只有 swipeone 可以与 jGestures 配合使用 的相关文章

随机推荐