Only swipeone is working with jGestures

前端 未结 7 2532
抹茶落季
抹茶落季 2021-02-10 09:56

I\'m trying to implement touch evens with jGestures. swipeone works fine but anything else (swipeleft, swiperight etc) is not firing.

7条回答
  •  温柔的废话
    2021-02-10 10:24

    SwipeLeft, SwipeRight, -Up and -Down are kind of poorly implemented. They are only triggered if you stay EXACTLY on the axis where you started the touch event. For example, SwipeRight will only work if your finger moves from (X,Y) (120, 0) to (250, 0).

    If the Y-Coordinates from Start- and Endpoint differ, it's not gonna work.

    jGestures.js (ca. line 1095) should better look something like this (readable):

    /**
     * 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);
    }
    

提交回复
热议问题