【发布时间】:2015-02-03 18:18:32
【问题描述】:
目标是有一个组件,在本例中是一个轮播,当用户从左向右移动手指时响应 touchmove 事件,但不会阻止默认的上下滚动,即使触摸如果用户将手指在 y 轴上移动超过某个阈值,则起源于相关组件。
或者,更简单地说,我需要禁用触摸设备上的浏览器滚动,直到 touchmove 甚至说它正常,然后重新启用它。
尽管进行了几个小时的修补,但我只能完全禁用浏览器滚动或不完全禁用它。有条件地禁用似乎不想工作。
基本逻辑是:
- 记录手指向下的坐标(触摸开始)。
- 在 touchmove 上,检查 Y 差是否大于 200 像素。
- 如果是这样,允许默认浏览器滚动,禁用 touchmove 监听器。
- 如果没有,阻止默认滚动,向左/向右滚动。
我一直在最新版 iPad mini 上对此进行测试。我发现了以下内容:
在 touchstart 处理程序中调用 preventDefault() 会停止该触摸的所有浏览器滚动,在拖动过程中无法重新启用。
尝试有条件地阻止 dragmove 处理程序中的默认值的行为与 touchstart 处理程序中的 preventDefault 相同。也就是阻塞拖拽,忽略条件!
dragmove 中这样的条件:
if(Math.abs(MouseMoveDistanceY) < 200){
if(ev.preventDefault){ev.preventDefault();}
}
...永久阻止垂直滚动,即使超过阈值!
无论如何,在触摸设备和 dragmove 处理程序中,我如何在满足条件时将控制权交给浏览器滚动?像“unPreventDefault()”这样的东西会很棒。除此之外,有什么想法吗?
【问题讨论】:
标签: javascript jquery touch