我写了一个现场演示来展示这个问题:
http://cssdeck.com/labs/wcczap11
如果您在蓝色,红色和绿色区域之间快速移动鼠标,您将看到x和z日志之间不会出现红色的“y”日志,这意味着您无法获得红色区域鼠标事件。
这就是我想要的:
但是当鼠标移动太快时:
我只是想知道有没有一种方法,无论我移动鼠标有多快,结果总是与第一张图像相同?
答案 0 :(得分:2)
我不完全确定它是否会影响javascript,但不同的鼠标有不同的轮询率(以Hz为单位测量),如果你的鼠标是1000hz并且你以恒定速度移动1000px,你应该选择每个像素。
然而实际上,当我们接近目标以提高准确度时,我们会非常快地移动鼠标以开始和减速。这意味着前700个像素的移动速度将超过700hz可以轮询的速度,因此您缺少鼠标在1hz内移动超过1px的值。
这是一个愚蠢的版本(主要是因为我不知道它的一切),但基本上小击中目标很容易被鼠标事件错过。
您可以尝试使目标区域更大,但它仍然无法修复所有内容:)
答案 1 :(得分:1)
这里的问题很简单。
事件并未因此而“丢失”。它们实际上从未实际触发过:由于传输速度的原因,浏览器在任何时候都没有将指针指向“过度”。如果是这种情况,则它也不会触发“退出”,因为它从未被视为首先“进入”。
答案 2 :(得分:0)
它不会迷路。它来了又去,但你看不清,因为你移动鼠标太快了。在你的例子中,它不会丢失。
答案 3 :(得分:0)
调用执行时间过长的回调会导致浏览器跳过轮询,直到下一个轮询刻度为止(您是否见过[Violation] 'message' handler took 326ms
控制台消息?)。您正在使用jQuery附加事件处理程序(我对jQuery并不了解很多),因此事件处理程序有可能不是被动的。