Android + jQuery - swipeleft 上的第二个不会执行

Android + jQuery - second on swipeleft wont execute

我必须为我的网页做一些特殊的事情才能在 Android 上以正确的方式工作。显示了一些图像(一个可见,另一个不可见)并且通过滑动应该可以更改它们。到目前为止,所有 OS.

都没有问题

但也应该可以缩放。现在 Android 开始成为 Buggy。由于滑动回调,它停止了缩放手势。回调本身不会更改页面,因为视图已缩放,因此不应中断。

现在,我通过在两根手指触摸显示屏时关闭 swipeleft 和 swiperight 并在手指离开显示屏时重新打开来解决问题。

首先 运行 我可以轻扫,然后我可以不间断地缩放,但之后我就不能再轻扫了。再次调用设置回调的函数,它设置了回调,但它们不会被执行...

代码如下:

app.utils.scroll = (function(){
var $viewport     = undefined;
var swipeDisabled = false;

var init = function(){
    $viewport = $('#viewport');

    $viewport.mousewheel(mayChangePage);

    // On touchstart with two fingers, remove the swipe listeners.
    $viewport.on('touchstart', function (e) {
        if (e.originalEvent.touches.length > 1) {
            removeSwipe();
            swipeDisabled = true;
        }
    });

    // On touchend, re-define the swipe listeners, if they where removed through two-finger-gesture.
    $viewport.on('touchend', function (e) {
        if (swipeDisabled === true) {
            swipeDisabled = false;
            initSwipe();
        }
    });

    initSwipe();
}
var mayChangePage = function(e){
    // If page is not zoomed, change page (next or prev).
    if (app.utils.zoom.isZoomed() === false) {
        if (e.deltaY > 0) {
            app.utils.pagination.prev(e);
        } else {
            app.utils.pagination.next(e);
        }
    }

    // Stop scrolling page through mouse wheel.
    e.preventDefault();
    e.stopPropagation();
};
var next = function (e) {
    // If page is not zoomed, switch to next page.
    if (app.utils.zoom.isZoomed() === false) {
        app.utils.pagination.next(e);
    }
};
var prev = function (e) {
    // If page is not zoomed, switch to prev page.
    if (app.utils.zoom.isZoomed() === false) {
        app.utils.pagination.prev(e);
    }
};
var initSwipe = function () {
    // Listen to swipeleft / swiperight-Event to change page.
    $viewport.on('swipeleft.next', next);
    $viewport.on('swiperight.prev', prev);
};
var removeSwipe = function () {
    // Remove listen to swipeleft / swiperight-Event for changing page to prevent android-bug.
    $viewport.off('swipeleft.next');
    $viewport.off('swiperight.prev');
};

$(document).ready(init);
}());

Pastebin

有什么想法可以让活动重新开始吗?

感谢所有想法。

问候 利普利夫

已修复:

jQuery 移动设备本身 prevents the swipe Event 如果处理程序已注册,则杀死 "scroll"。

所以我覆盖了 $.event.special.swipe.scrollSupressionThreshold 值并将其设置为 10000,以防止 jQueryMobile 的 preventDefault-call:

$.event.special.swipe.scrollSupressionThreshold = 10000;

现在我的代码看起来像

app.utils.scroll = (function(){
var $viewport     = undefined;
var swipeDisabled = false;

var init = function(){
    $viewport = $('#viewport');

    $viewport.mousewheel(mayChangePage);

    // See #23.
    $.event.special.swipe.scrollSupressionThreshold = 10000;

    // Listen to swipeleft / swiperight-Event to change page.
    $viewport.on('swipeleft.next', next);
    $viewport.on('swiperight.prev', prev);
}
var mayChangePage = function(e){
    // If page is not zoomed, change page (next or prev).
    if (app.utils.zoom.isZoomed() === false) {
        if (e.deltaY > 0) {
            app.utils.pagination.prev(e);
        } else {
            app.utils.pagination.next(e);
        }
    }

    // Stop scrolling page through mouse wheel.
    e.preventDefault();
    e.stopPropagation();
};
var next = function (e) {
    // If page is not zoomed, switch to next page.
    if (app.utils.zoom.isZoomed() === false) {
        app.utils.pagination.next(e);
    }
};
var prev = function (e) {
    // If page is not zoomed, switch to prev page.
    if (app.utils.zoom.isZoomed() === false) {
        app.utils.pagination.prev(e);
    }
};

$(document).ready(init);
}());

感谢 Omar - 他在 jquery IRC 中与我一起写了几分钟/几小时,并就覆盖 jQueryMobile 的标准值提出了一些建议。