This page was translated from English by the community.Learn more and join the MDN Web Docs community.
window.requestAnimationFrame()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since июль 2015 г..
window.requestAnimationFrame указывает браузеру на то, что вы хотите произвести анимацию, и просит его запланировать перерисовку на следующем кадре анимации. В качестве параметра метод получает функцию, которая будет вызвана перед перерисовкой.
Примечание:Ваш callback метод сам должен вызватьrequestAnimationFrame() иначе анимация остановится.
Вы должны вызывать этот метод всякий раз, когда готовы обновить анимацию на экране, чтобы запросить планирование анимации. Обычно запросы происходят 60 раз в секунду, но чаще всего совпадают с частотой обновления экрана. В большинстве браузеров в фоновых вкладках или скрытых<iframe>, вызовыrequestAnimationFrame() приостанавливаются, для того, чтобы повысить производительность и время работы батареи.
Callback методу передаётся один аргумент,DOMHighResTimeStamp, который содержит текущее время (количество миллисекунд, прошедших с моментаtime origin). Когда колбэки, отправленные в очередь с помощьюrequestAnimationFrame() начинают вызывать несколько колбэков в одном кадре, каждый получает одинаковый timestamp, хотя для вычисления каждого callback было затрачено время. Этот timestamp - десятичное число в миллисекундах, но с минимальной точностью в 1ms (1000 µs).
In this article
Синтаксис
window.requestAnimationFrame(callback);Параметры
callbackФункция, которая будет вызвана, когда придёт время обновить вашу анимацию на следующей перерисовке.
elementНеобязательныйНеобязательный параметр (не используется в Firefox или IE), определяющий элемент, который визуально содержит всю анимацию. Для canvas'а и WebGL'a им должен быть
<canvas>. Для других элементов вы можете опустить этот параметр для чуть лучшего пользовательского опыта.
Возвращаемое значение
requestID — длинное целое, являющееся уникальным идентификатором для записи, содержащей callback. Оно не равно нулю, но других предположений о его значении делать не следует. Вы можете передать его вwindow.cancelAnimationFrame() для отмены вызова.
Пример
var start = null;var element = document.getElementById("SomeElementYouWantToAnimate");function step(timestamp) { if (!start) start = timestamp; var progress = timestamp - start; element.style.transform = "translateX(" + Math.min(progress / 10, 200) + "px)"; if (progress < 2000) { window.requestAnimationFrame(step); }}window.requestAnimationFrame(step);Спецификации
| Specification |
|---|
| HTML> # dom-animationframeprovider-requestanimationframe> |