【问题标题】:Touchend not firing after touchmove触摸移动后触摸端不触发
【发布时间】:2013-09-30 06:54:07
【问题描述】:

我正在尝试为移动设备制作一个页面,该页面检测scrollTop 位置,如果scrollTop 低于文档高度的一半,则滚动到页面顶部,否则滚动到底部。

我通过使用这个实现了这一点:

var ScrollTimeout;
$(window).on('scroll',function(){
    clearTimeout(ScrollTimeout);
    ScrollTimeout = setTimeout(scrollToTopOrBottom,200);
    });

问题是当用户停止滚动但手指仍然在屏幕上时会触发超时。

然后我参与了touchend 事件,这很棒。

$(document).on('touchend',function(){
    scrollToTop();
    });

用户可以停止滚动(手指仍在屏幕上),然后继续滚动而不触发scrollToTopOrBottom() 函数。

问题是,该事件在浏览器之间不一致:

在某些浏览器(Maxthon 和 Android)中,touchend 事件按预期工作,但在 Opera Mobile 和 Chrome 中,touchend 事件不会触发。对此的解释是touchend doesn't fires because touchcancel has been fired before

我试过了

$(document).on('touchmove',function(e){
    e.preventDefault();
    });

并成功避免了touchcancel的触发,但不幸的是也避免了滚动的自然行为。

有谁知道如何做到这一点?我完全没有想法。

谢谢。

【问题讨论】:

    标签: javascript android jquery scroll touch


    【解决方案1】:

    尝试在 touchend 和 touchcancel 上附加监听器。

    $(document).on('touchend touchcancel', function() {
        doSomthing();
    });
    

    【讨论】:

    • 尽了一切努力让触摸端在 android 4.4 上正常工作,这是唯一有帮助的!谢谢!
    【解决方案2】:

    我写了一个垫片来处理这个问题对你来说可能有点晚了,但它可能会对某人有所帮助。 https://github.com/TNT-RoX/android-swipe-shim

    【讨论】:

    • 在 android 4.4.4 默认浏览器上不起作用.. 甚至不调用事件(即 swipeUp)
    • 有效,但滑动事件取决于容器的滚动。我认为手动滚动更可取。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多