我正在尝试为移动设备制作一个页面,该页面可以检测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
事件,但不幸的是也避免了滚动的自然行为。
有人知道如何实现这个功能吗?我已经没有任何想法了。
谢谢。