【发布时间】:2013-09-03 00:56:31
【问题描述】:
用例: - 如果用户正在滚动内部 div,一旦内部 div 结束,它就不应滚动外部 div。
如果内部 div 已经到达末尾,则以下代码可以正常工作。即内部 div 到达末尾后触发 touchstart/touchmove 事件。
但是,如果我不解除触摸并继续滚动,并且在此过程中到达内部 div 的末尾,它就会开始滚动外部 div。
$('body').find('.scrollableDiv').on(
{
'touchstart' : function(e) {
touchStartEvent = e;
},
'touchmove' : function(e) {
e.stopImmediatePropagation();
$this = $(this);
if ((e.originalEvent.touches[0].pageY > touchStartEvent.originalEvent.touches[0].pageY && this.scrollTop == 0) ||
(e.originalEvent.touches[0].pageY < touchStartEvent.originalEvent.touches[0].pageY && this.scrollTop + this.offsetHeight >= this.scrollHeight)){
e.preventDefault();
}
},
});
如何在到达内部 div 的末尾时立即停止滚动? 我正在尝试在 android 设备上的浏览器上实现这一点。有人可以在这方面帮助我吗?
注意:用户甚至应该能够滚动外部 div。
提前致谢。
【问题讨论】:
-
这让我觉得是个坏主意。您正在尝试编写属于 Web 浏览器本身的代码,以便通过禁用用户可能想要的功能以与其他站点上的工作方式不一致的方式在您的站点上更改浏览器的用户界面.
-
对不起,如果我没有把我的观点说清楚。实际上,我正在尝试提供一种功能,用户可以独立滚动两个 div,并且滚动内部 div 永远不应该滚动外部 div。考虑这样一种情况:用户在内部 div 中进行了快速滚动,这将导致页面在内部 div 到达末尾时立即滚动,然后用户必须再次向上滚动页面以使内部 div 变为可见看法。这不是一个糟糕的用户体验吗?
-
Mozilla 似乎同意你的看法,因为 Firefox 不在任何平台上执行此操作,无论是在桌面(使用滚轮)还是在移动设备(使用手指)上。苹果似乎不同意你的看法。我认为这可能是决定的归属,试图让它在不同的网站上以不同的方式工作本身就是糟糕的用户体验。
标签: html scroll touch touchmove