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

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

谢谢。

  • jQuery的ajaxfunction在Android PhoneGap应用程序中不起作用
  • jQuery拖放触摸设备(iPad,Android)
  • 更改PhoneGap / Cordova用户代理的AJAX
  • li元素中的一个div的jquery点击事件没有在移动Safari中被触发
  • Cordova + JqueryMobile:Ajax失败
  • JQuery不适用于WebView
  • 一个button - 3个app store - 如何将用户redirect到相应的app store?
  • 在没有当前上下文的情况下调用OpenGL ES API(每个线程logging一次)
  • 尝试在touchend和touchcancel上附加监听器。

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

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