Dziwna wartość czasu w wywołaniu zwrotnym requestAnimationFrame () [duplicate]

Dec 05 2020

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

Dlaczego nowzawsze jest mniej niż prev(przynajmniej w ostatnich oddziałach Chrome)?

Zrzut ekranu:

Odpowiedzi

1 MichalisGarganourakis Dec 05 2020 at 06:41

Dzieje się tak, ponieważ żądasz animacji między bieżącą klatką a następnym malowaniem, ale w rzeczywistości mógłbyś przegapić pierwszy wyzwalacz wywołania zwrotnego bieżącej klatki, który jest wtedy, gdy timestampargument został ustanowiony.

Wiele wywołań requestAnimationFramezwrotnych może wystąpić w tym przedziale czasu, ale wszystkie z nich będą miały timestamppierwszy requestsAnimationFramewyzwalacz wywołania zwrotnego w aktywnej ramce, który mógł wystąpić przed wywołaniem performance.now().

MDN stwierdza również:

Funkcja wywołania zwrotnego otrzymuje pojedynczy argument, DOMHighResTimeStamp podobny do tego zwracanego przez performance.now (), wskazujący moment, w którym requestAnimationFrame () zaczyna wykonywać funkcje zwrotne .