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

11

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

给定一个可滚动的div,如果我在惯性滚动运动时触摸该div,则滚动运动停止,并且touchstart事件根本不会触发。

在小米Android设备(在Chrome上测试)上测试时,滚动会停止并且touchstart事件将被触发。

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

我设置了一个演示来测试这种行为:

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

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

1个回答

0

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

如果在touchstart处理程序中放置preventDefault(),则可以解决此问题(但会禁用滚动)。根据您的用例,这可能是可接受的解决方案。我认为有两种可能的选择:

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

如果有一种方法可以始终获得touchstart事件而不需要在touchstart处理程序中调用preventDefault()且不会破坏本机滚动,请在此处发布评论,我将不胜感激。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接