我需要知道鼠标光标何时离开div
. 所以我连接了这个mouseout
事件。但是,如果我非常快速地将鼠标移出 ,则不会触发div
该mouseout
事件。这是正确的:鼠标光标是坐以待毙里面,它现在外面的,然而在回调没有被调用。(如果我不那么快地移动鼠标,它就可以正常工作。)div
div
mouseout
顺便说一下,在最新的谷歌浏览器中确实如此——所以不仅仅是“旧浏览器”的问题。
解决方法:
之前已经提出了一个关于这个问题的问题。显然这只是一个现实,我发现的唯一解决方法是手动监视mousemove
事件,每次检查光标的 x/y 坐标并查看它们是否落在div
边界框内,因此您有更多机会“注意”光标是否不再位于其中。
与让浏览器本机完成所有这些相比,对每个像素移动执行计算有点性能损失。编码也很乏味。
关于我的问题...
为什么浏览器不能可靠地捕获mouseout
事件?如果我可以div
使用上述解决方法可靠地判断鼠标何时离开,为什么浏览器不能这样做?
我了解(从上面链接的答案中)JavaScript 不会尝试插入“帧”。假设您在 上放置一个mousemove
处理程序document
,并在完美的水平线上将鼠标快速向右移动 200 像素,您可能不会获得 200 个mousemove
事件。会漏掉几个。我没有问题。
但是,如果在鼠标越过 边界时错过了某些像素移动div
,那么为什么mouseout
还应该跳过该事件呢?当浏览器最终再次开始注册鼠标的位置时(在突然快速移动之后),即使鼠标现在在框外几英里处,关键是它曾经在框内,不再是。那么为什么不触发 mouseout 事件呢?
我只是不明白为什么这对浏览器供应商来说是一个难以解决的问题。(但我相信可能有一个很好的理由,我太愚蠢了,无法想到。)
我发布这个问题主要是出于好奇,但我希望答案可以提供一些见解,可以帮助我更有效地解决问题。此外,欢迎任何替代解决方法(比上述方法更快)。