--- title: window.requestAnimationFrame() slug: Web/API/window/requestAnimationFrame tags: - Анимация translation_of: Web/API/window/requestAnimationFrame original_slug: DOM/window.requestAnimationFrame ---
window.requestAnimationFrame
указывает браузеру на то, что вы хотите произвести анимацию, и просит его запланировать перерисовку на следующем кадре анимации. В качестве параметра метод получает функцию, которая будет вызвана перед перерисовкой.
requestAnimationFrame()
иначе анимация остановится.Вы должны вызывать этот метод всякий раз, когда готовы обновить анимацию на экране, чтобы запросить планирование анимации. Обычно запросы происходят 60 раз в секунду, но чаще всего совпадают с частотой обновления экрана. В большинстве браузеров в фоновых вкладках или скрытых <iframe>
, вызовы requestAnimationFrame()
приостанавливаются, для того, чтобы повысить производительность и время работы батареи.
Callback методу передаётся один аргумент, {{domxref("DOMHighResTimeStamp")}}, который содержит текущее время (количество миллисекунд, прошедших с момента time origin). Когда колбэки, отправленные в очередь с помощью requestAnimationFrame()
начинают вызывать несколько колбэков в одном кадре, каждый получает одинаковый timestamp, хотя для вычисления каждого callback было затрачено время. Этот timestamp - десятичное число в миллисекундах, но с минимальной точностью в 1ms (1000 µs).
window.requestAnimationFrame(callback);
callback
element
{{ optional_inline() }}requestID
— длинное целое, являющееся уникальным идентификатором для записи, содержащей callback. Оно не равно нулю, но других предположений о его значении делать не следует. Вы можете передать его в {{ domxref("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);
В Edge версиях младше 17 и в Internet Explorer не надёжно запускать requestAnimationFrame
перед циклом рисования.
Спецификация | Статус | Комментарий |
---|---|---|
{{SpecName('HTML WHATWG', '#animation-frames', 'requestAnimationFrame')}} | {{Spec2('HTML WHATWG')}} | Без изменений, заменяет предыдущую. |
{{SpecName('RequestAnimationFrame', '#dom-windowanimationtiming-requestanimationframe', 'requestAnimationFrame')}} | {{Spec2('RequestAnimationFrame')}} | Первоначальное описание. |
{{Compat}}