我遇到了一个问题,其中在requestAnimationFrame
回调中接收到的时间戳和鼠标事件似乎不按顺序排列,我的意思是我希望它们会增加(因为我希望时间只朝一个方向:)),但是事实并非如此。可以用以下示例代码说明:
<html><body>
<script type="text/javascript">
let lastTimesamp = -1;
function log(name, timestamp) {
console.log(name, timestamp);
console.assert(lastTimesamp < timestamp, "Invalid time", lastTimesamp, timestamp);
lastTimesamp = timestamp;
}
function update(timestamp) {
log("update", timestamp);
requestAnimationFrame(update);
}
requestAnimationFrame(update);
function mouseDown(event) {
log("mouseDown", event.timeStamp);
}
document.body.addEventListener("mousedown", mouseDown, false);
</script>
</body></html>
如果您开始使用鼠标单击,最终可以看到这种输出:
这意味着鼠标按下事件发生在最后一次update
调用之前。
我在生产应用程序上遇到了相反的情况:update
的调用是通过时间戳进行的,该时间戳在最后一次调用鼠标按下回调之前。
[有人可以向我解释吗?从文档中看,似乎不必以相同的方式对其进行度量,但是同时对它们计时是没有道理的吗?
[因此,您的UI事件可能会在与绘画帧相同的帧中触发,因此此刻将设置其timeStamp
或even by the OS when it received it in the first place。但是,UA将选择优先考虑
AnimationFrameCallbacks