Touchend在touchmove之后没有开火

Lui*_*sus 11 javascript jquery android scroll touch

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

我通过使用这个实现了:

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

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

然后我参加了这个touchend活动,这很棒.

$(document).on('touchend',function(){
    scrollToTop();
    });
Run Code Online (Sandbox Code Playgroud)

用户可以停止滚动(手指仍在屏幕上),然后继续滚动而不触发该scrollToTopOrBottom()功能.

问题是,该事件在浏览器之间是不存在的:

在某些浏览器(Maxthon和Android)中,该touchend事件按预期工作,但在Opera Mobile和Chrome中,touchend事件不会触发.对此的解释是,touchend因为touchcancel之前被解雇所以不会触发.

我试过这个

$(document).on('touchmove',function(e){
    e.preventDefault();
    });
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

don*_*ok0 13

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

$(document).on('touchend touchcancel', function() {
    doSomthing();
});
Run Code Online (Sandbox Code Playgroud)