【发布时间】:2013-09-30 06:54:07
【问题描述】:
我正在尝试为移动设备制作一个页面,该页面检测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 doesn't fires because touchcancel has been fired before。
我试过了
$(document).on('touchmove',function(e){
e.preventDefault();
});
并成功避免了touchcancel的触发,但不幸的是也避免了滚动的自然行为。
有谁知道如何做到这一点?我完全没有想法。
谢谢。
【问题讨论】:
标签: javascript android jquery scroll touch