在iOS中的safari上,当它的元素或祖先在mousemove
上有一个事件监听器时,它上面的click
事件监听器将被忽略。
<div id="el"></div>
document.getElementById("el").addEventListener("mousemove", _e => console.log("mousemove"));
document.getElementById("el").addEventListener("click", _e => console.log("click"));
在ios上,从未记录点击,在Android(Chrome)或桌面浏览器上都是。
有关于ios点击错误的数十个stackoverflow问题,但我找不到任何关于此组合的信息。
答案 0 :(得分:1)
以下是Apple自己的文档摘录,描述了iOS上的Safari如何使用触摸输入来模拟鼠标事件:
...事件按此顺序到达:
mouseover
,mousemove
,mousedown
,mouseup
和click
。 [...]如果页面内容在mousemove
事件中发生更改,则不会发送序列中的后续事件
换句话说,如果您对mousemove
事件处理程序(而不仅仅是简单的console.log()
)中的DOM进行了一些更改,则click
事件将被延迟,根据Apple的规格
回到iPhone的推出时,这就是Apple处理实际鼠标指针可用于悬停效果而触摸不能的事实的方式。
尽管如此,我不确定为什么click事件不会在简单的小提琴中延迟。这些天使用的算法可能更“聪明”,并通过评估内容信息的变化和因素来确定DOM变更是否相关。