Javascript document.onmousemove延迟
我正试图在画布上用鼠标和键盘控制构建一个昂贵的脚本。 我正在使用document.onmousemove和document.onkeydown/onkeydup来进行此控制,但当我按下任何按钮时,都会执行大量的“onkeydown”执行,并且鼠标会严重滞后。它看起来像“只写鼠标位置缓冲区”之类的东西。当我松开键时,鼠标“模拟”我先前的动作。 我在Firefox和chrome上进行了测试,这个问题只存在于FF上 这里有一些代码Javascript document.onmousemove延迟,javascript,Javascript,我正试图在画布上用鼠标和键盘控制构建一个昂贵的脚本。 我正在使用document.onmousemove和document.onkeydown/onkeydup来进行此控制,但当我按下任何按钮时,都会执行大量的“onkeydown”执行,并且鼠标会严重滞后。它看起来像“只写鼠标位置缓冲区”之类的东西。当我松开键时,鼠标“模拟”我先前的动作。 我在Firefox和chrome上进行了测试,这个问题只存在于FF上 这里有一些代码 document.onmousemove = functio
document.onmousemove = function(e){
obj = canvas;
var curleft = curtop = 0;
do {
curleft += obj.offsetLeft;
curtop += obj.offsetTop;
} while (obj = obj.offsetParent);
mX = e.pageX - curleft;
mY = e.pageY - curtop;
}
var dt=0.02;
setInterval(tick, dt*1000);
update(dt);
function tick() {
if((!pause) || step)
{
update(dt);
step = false;
}
interact();
draw();
}
根据
更新
、交互
和绘图
功能的复杂程度,20毫秒的计时器间隔可能太短,占用大量CPU时间。由于JavaScript在单个线程中运行,这可能会阻止脚本处理鼠标事件
这些事件可以在浏览器的输入队列中排队,稍后发送到您的脚本(可能在Firefox中发生),或者如果您的脚本处理速度不够快(可能在Chrome中发生),则这些事件可能会被丢弃
一些可能的解决办法:
setInterval
,而是在每次执行tick
后尝试使用setTimeout
——这将防止多个计时器事件排队并一起触发