触发键盘事件时,mousemove不会触发每一帧

时间:2020-02-08 12:15:40

标签: javascript dom-events mousemove

理想情况下,在浏览器中,mousemove应该在鼠标不断移动时触发每一帧。但是当按下(或重复)或释放某个键时,mousemove会停止触发一两帧。 我们可以使用以下代码进行测试:

t0 = new Date().getTime()
window.onmousemove = function() {
    t = new Date().getTime()
    if (t-t0 > 20)
        console.log(t-t0)
    t0 = t
}

尝试保持鼠标移动。仅当您按下,释放键或按住某个键(因为重复)时,控制台才会打印mousemove的延迟。

我已经在Firefox和Chrome上对此进行了测试。我使用的是macOS 10.14.2。

我正在写一个Web动作游戏,所以我需要确保每帧鼠标位置都会更新。有什么解决办法吗?

1 个答案:

答案 0 :(得分:0)

t0 = new Date().getTime()
window.onmousemove = function() {
    t = new Date().getTime()
    if (t-t0 > 2)
        console.log(t-t0)
    t0 = t
}

这将使console.log()快速发疯,当您快速移动鼠标时不会跳过,还测试了在Windows 10,Chrome 10上按下键时代码不会跳过

您还应该考虑使用游戏的主循环来处理和管理时间,帧和事件

相关问题