PassFront
  1. PassFront
  2. База знаний
  3. Асинхронность и Event Loop

Что такое requestAnimationFrame?

Асинхронность и Event Loop

`requestAnimationFrame` (rAF) — это метод, который планирует выполнение функции прямо перед следующей перерисовкой браузера, синхронизируя анимацию с частотой обновления экрана.

Зачем нужен

Для плавных анимаций коллбэк должен выполняться синхронно с кадрами (обычно 60 FPS ≈ каждые 16.7 мс). setTimeout/setInterval этого не гарантируют и дают дёрганую анимацию.

function animate(time) {
  box.style.transform = `translateX(${time / 10}px)`;
  requestAnimationFrame(animate); // следующий кадр
}
requestAnimationFrame(animate);

Преимущества перед setInterval

  • Синхронизация с кадрами — плавность.
  • Пауза в фоне — не выполняется в неактивной вкладке (экономит батарею/CPU).
  • Браузер сам подстраивает частоту под дисплей (в т. ч. 120 Гц).

Отмена

const id = requestAnimationFrame(animate);
cancelAnimationFrame(id);

Аргумент коллбэка

В коллбэк передаётся DOMHighResTimeStamp — точное время, по которому считают прогресс анимации независимо от частоты кадров.

Коротко для собеседования

requestAnimationFrame вызывает коллбэк перед следующей перерисовкой (~60 FPS), давая плавные анимации, синхронные с кадрами, и паузу в фоновых вкладках. Лучше setInterval для анимаций; отменяется cancelAnimationFrame.

Другие вопросы раздела