Я столкнулся с проблемой, когда временные метки, полученные в 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
выполняется с отметкой времени, которая предшествует последний вызов обратного вызова с помощью мыши.
Может ли кто-нибудь мне это объяснить? Из документации видно, что они необязательно измеряются одинаково, но не приведет ли это к смысл рассчитывать их одновременно?