![](/img/trans.png)
[英]How to not get spammed by mouseover/mouseout events when mouse is moving between subelements?
[英]Mouseover and mouseout events won't trigger when mouse moves too fast?
我写了一个现场演示来展示这个问题:
http://cssdeck.com/labs/wcczap11
如果您在蓝色、红色和绿色区域之间快速移动鼠标,您将看到 x 和 z 日志之间没有出现红色“y”日志,这意味着您无法获取红色区域鼠标事件。
这就是我要的:
但是当鼠标移动太快时:
我只想知道有没有办法不管我移动鼠标的速度有多快,结果总是与第一张图像相同?
我不完全确定它是否会影响 javascript,但不同的鼠标具有不同的轮询率(以 Hz 为单位),如果您的鼠标为 1000hz,并且您以恒定速度移动 1000px,您应该拾取每个像素。
然而,实际上我们开始时会非常快地移动鼠标,并在接近目标时放慢速度以提高准确性。 这意味着前 700 像素的移动速度将比 700hz 可以轮询的速度快,因此您缺少鼠标在 1hz 中移动超过 1px 的值。
这有点简化版(主要是因为我对它一无所知)但基本上小目标很容易被鼠标事件遗漏。
您可以尝试使目标区域更大,但它仍然无法解决所有问题:)
这里的问题很简单。
事件并没有像这样“丢失”。 它们从一开始就不会真正触发:由于传输速度的原因,浏览器在任何时候都不会将指针视为“结束”。 如果是这种情况,那么它也不能触发“退出”,因为它从一开始就从未被视为“进入”。
它不会丢失。 它来来去去,但你看不到,因为你移动鼠标太快。 在您的示例中,它并没有丢失。
调用执行时间过长的回调可能会导致浏览器跳过轮询,直到下一个轮询滴答(您是否见过[Violation] 'message' handler took 326ms
控制台消息?)。 您正在使用 jQuery 来附加事件处理程序(我对 jQuery 了解不多),因此事件处理程序有可能不是被动的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.