如果已经滚动(在 iPhone 上),则不会在可滚动 div 上触发 touchstart 事件

Osc*_*alo 7 scroll mobile-safari touch-event touchstart web

我在 iPhone 6 设备上滚动时遇到了这个问题(在 Safari 和 Chrome 上测试):

给定一个可滚动的 div,如果我在 div 已经处于惯性滚动运动时触摸它,滚动运动会按预期停止,但touchstart事件根本不会触发。

当小米Android装置(在Chrome测试)测试的滚动停止touchstart事件被触发。

为什么touchstart没有触发?。这是 iPhone 上的标准行为吗?

我已经设置了一个小提琴来测试这种行为:

https://fiddle.jshell.net/galoxia/L63wj9or/

只需做出手势以“激活”蓝色框上的惯性滚动,然后再次触摸以停止它。在 Android 上,您将touchstart在黄色框中看到。在 iPhone 上你不会。

Adr*_*aty 0

我在尝试在 JavaScript 中为触摸设备实现双击处理程序时遇到了同样的问题。如果 iOS Safari 中发生动量滚动,则在初始事件(启动滚动)touchstart后大约 500 毫秒内不会发送事件。touchstarttouchstart

如果您将 a 放入处理preventDefault()程序中touchstart,则可以解决问题(但会禁用滚动)。根据您的用例,这可能是一个可接受的解决方案。在我看来,两种可能的选择是:

  1. 禁用“通过触摸进行本机滚动”并接收所有事件(在处理程序中touchstart使用)preventDefault()touchstart
  2. 启用“通过触摸进行本机滚动”,但在滚动touchstart初始后大约 500 毫秒内不接收事件touchstart

我很乐意在这一点上被证明是错误的。如果有一种方法可以在不调用处理程序且不破坏本机滚动的情况下持续获取事件touchstart,请在此处发表评论。preventDefault()touchstart