Touchend在touchmove之后没有开火

时间:2013-09-30 06:54:08

标签: javascript android jquery scroll touch

如果scrollTop低于文档高度的一半,我正在尝试为检测到scrollTop位置的移动设备创建一个页面并滚动到页面顶部,如果是{1}},则滚动到底部不

我通过使用它实现了这个目标:

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的触发,但不幸的是也避免了滚动的自然行为。

有谁知道如何实现这一目标?我完全没有想法。

感谢。

2 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:1)

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