鼠标滚动时不触发mouseover/mouseenter事件

12

我有一只高级的苹果鼠标,能够识别手指动作,如“滑动(swipe)”和“滚动(scroll)”。

当我将光标固定在屏幕上,用手指向下滚动页面时,尽管光标保持不动,但自然而然地会经过不同的元素,因为这些元素在进行移动

我的问题是,在这种情况下,当光标直接位于某个元素之上时,适当的mouseover/mouseenter回调函数并没有被调用。

我该如何解决这个问题?


1
可能是 https://dev59.com/UXA75IYBdhLWcg3wW3oZ 的重复。 - Blazemonger
3个回答

4

我使用过的大多数浏览器在页面滚动时不会触发鼠标事件。您可以尝试监听onscroll事件,并使用document.elementFromPoint来确定在onscroll事件触发时鼠标光标下移动了哪个元素。


1
Firefox确实触发了事件!但是Chrome没有... - Randomblue
2
截至2015年10月,这是大多数浏览器供应商的惯例,以优化滚动性能。 - pilau
1
但是如果鼠标事件没有触发,我们如何获取elementFromPoint的鼠标光标坐标?答案并不完整。 - Matthew
与@Matthew相同的评论。这个答案不完整。 - Zaqx
document.elementsFromPoint 可能比 elementFromPoint 更有用。 - Zach Saucier

1

Jquery的mousemove方法在这里是一个不错的解决方案,因为它会在鼠标滚动到元素上时触发,即使鼠标保持静止。

你甚至可以在mousemove事件上触发mouseenter事件,只要你包含某种标志/状态检查来确保你的mouseenter代码不会在mousemove上重复执行。


0
我认为你不能...除非有一个在计时器上运行的函数来检查鼠标相对于元素的位置,但是这样会带来巨大的性能损失。可能应该向浏览器制造商提交错误报告,并检查其他浏览器是否复制了该行为 - 我猜测会因为我不认为任何浏览器会在鼠标没有实际移动时触发mouseover/mouseenter事件。

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