我在iPhone 6设备上滚动时遇到了这个问题(在Safari和Chrome上测试过):
给定一个可滚动的div,如果我在惯性滚动动作时触摸div,则滚动动作会按预期停止,但touchstart
事件根本不会触发。
在小米Android设备上测试(在Chrome上测试)时,滚动停止 AND touchstart
事件被触发。
为什么touchstart
没有被触发?这是iPhone上的标准行为吗?。
我已经设置了一个小提琴来测试这种行为:
https://fiddle.jshell.net/galoxia/L63wj9or/
只需将手势设置为“激活”蓝色方框上的惯性滚动,然后再次触摸即可将其停止。在Android上,您会在黄色框中看到touchstart
。在iPhone上,你不会。
答案 0 :(得分:0)
您找到解决方案了吗?
在发生弹性滚动时,点击touchstart
事件也不会触发。既没有touchmove
也没有touchend
,整个触摸都不会引起Javascript的注意,但是会发生滚动。您得到的只是一个scroll
和一个偶然的resize
。
这可能需要有关WebKit错误跟踪器的报告。
答案 1 :(得分:0)
在尝试为JavaScript中的触摸设备实现双击处理程序时,我遇到了同样的问题。如果在iOS Safari中发生动量滚动,则在初始touchstart
(启动滚动的touchstart
)之后的大约500毫秒内不会发送touchstart
事件。
如果将preventDefault()
放在touchstart
处理程序中,则可以解决此问题(但不能滚动)。根据您的用例,这可能是可接受的解决方案。如我所见,两个可能的选项是:
touchstart
个事件(在preventDefault()
处理程序中使用touchstart
)touchstart
之后约500毫秒内未收到touchstart
个事件我很想被证明是错误的。如果有一种方法可以持续获取touchstart
事件,而又无需在preventDefault()
处理程序中调用touchstart
并且不破坏本机滚动,请在此处发表评论。