Android + jQuery - 第二个向左滑动不会执行

Android + jQuery - second on swipeleft wont execute

本文关键字:执行 jQuery 第二个 Android      更新时间:2023-09-26

我必须为我的网页做一些特殊的事情才能以正确的方式在Android上运行。显示一些图像(一个可见,另一个不可见),通过滑动应该可以更改它们。到目前为止,在所有操作系统上都没有问题。

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

现在,我在两个手指触摸显示屏时向左滑动并向右滑动,如果手指离开显示器,我会重新打开。

在第一次运行时,我可以滑动,然后我可以缩放而不会中断,但随后我不能再滑动了。再次设置回调的函数被调用,它设置回调,但它们不会被执行......

代码如下:

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);
}());

帕斯宾

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

感谢您的所有想法。

问候利波利夫

修复了它:

jQuery Mobile 本身在注册处理程序时会阻止滑动事件,以终止"滚动"。

所以我覆盖了$.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标准值的建议。