Touchend touchmove后不开火

我试图为移动设备创build一个页面,检测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不会触发,因为touchcancel已经被触发了 。

我已经试过了

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

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

有谁知道这是如何实现的? 我完全没有想法。

谢谢。

Solutions Collecting From Web of "Touchend touchmove后不开火"