Странное значение времени в обратном вызове requestAnimationFrame () [дубликат]

Dec 05 2020

const prev = performance.now();
requestAnimationFrame(now => console.log(now - prev));

Почему nowвсегда меньше prev(по крайней мере, в последних ветках Chrome)?

Скриншот:

Ответы

1 MichalisGarganourakis Dec 05 2020 at 06:41

Это происходит потому, что вы запрашиваете анимацию между текущим кадром и следующей перерисовкой, но на самом деле вы могли пропустить первый триггер обратного вызова текущего кадра, когда timestampбыл установлен аргумент.

В requestAnimationFrameэтот промежуток времени может произойти много вызовов обратного вызова, но все они будут иметь триггер обратного вызова timestampпервого requestsAnimationFrameв активном кадре, который мог произойти до вашего вызова performance.now().

MDN также заявляет:

Функции обратного вызова передается один единственный аргумент, DOMHighResTimeStamp, аналогичный тому, который возвращается функцией performance.now (), указывающий момент времени, когда requestAnimationFrame () начинает выполнять функции обратного вызова .