【发布时间】:2013-02-19 00:16:44
【问题描述】:
在 Javascript 中,是否可以在 mousemove 事件处理程序中确定队列中是否有任何挂起的 mousemove 事件?
或者,最好是,是否可以让事件队列跳过队列中的所有 mousemove 事件,除了最近的事件?
我正在使用 mousemove 和其他鼠标事件来允许用户在屏幕上拖动元素,并且我不需要浪费 CPU 和 GPU 周期在每个 mousemove 事件上重绘拖动的项目(在其中我更新顶部 &左 CSS 属性),只要我能足够快地跳过中间事件。
我的网站目前没有遇到任何性能或可视化问题;我只是想让我的 JavaScript 尽可能高效。
【问题讨论】:
-
定义“重绘”。是只是设置
left/top属性,还是涉及更多? -
我认为解决问题的方法比检查事件队列更有趣。这种代码真的很难正确。设置一个计时器并仅在例如 1/10 秒过去时才重绘会更容易。如果您需要减少硬件负载,请延长时间,但他们说人们可以检测到相隔 1/10 秒的事件。因此,更频繁地重绘是在做大多数人甚至无法检测到的事情(尽管,闪烁效果可能对某些人来说似乎是可以检测到的)。
-
@CrescentFresh:是的,重绘只是
left/top属性。 -
第二个估计值的 1/10 取决于您在做什么。需要 1/10 秒的人体运动,比如在田径运动中,对一个人来说是可见的,并且在丢失时是显而易见的。我认为移动鼠标后 1/10 秒的拖动会非常明显。人类语音涉及不到 1/10 秒的各种比特,并且在省略时会很突出。
标签: javascript mousemove eventqueue