ТрадицияjsанимацияРеализация общего использованияsetTimeout/setIntervalДождитесь запланированного выполненияанимацияоперация обновления,Но есть некоторые проблемы при использовании этого метода.
И requestAnimationFrame может решить эти проблемы:
С точки зрения использования кода requestAnimationFrame и setTimeout очень похожи.
function renderFrame() {
// do something
}
// setTimeout / setInterval
var handler = setTimeout(renderFrame, 100);
// requestAnimationFrame
var hanlder = requestAnimationFrame(renderFrame);
Как видно из вышеизложенного, разница между ними заключается в том, указано ли значение интервала.
В настоящее время некоторые браузеры более ранних версий не поддерживают requestAnimationFrame. В этом случае для совместимости вам все равно необходимо использовать setTimeout/setInterval для реализации анимации. Кроме того, названия requestFrameAnimation в браузерах разных производителей тоже различаются, поэтому для достижения совместимости можно использовать самый простой метод, представленный ниже.
window.requestAnimFrame = (function() {
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
function( callback ){
window.setTimeout(callback, 1000 / 60);
};
})();
Если вы хотите быть в большей безопасности, вы можете обратиться к пакету Эрика Мёллера, специалиста по браузеру Opera.
(function() { var lastTime = 0; var vendors = ['webkit', 'moz']; for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame']; } if (!window.requestAnimationFrame) window.requestAnimationFrame = function(callback, element) { var currTime = new Date().getTime(); var timeToCall = Math.max(0, 16 - (currTime - lastTime)); var id = window.setTimeout(function() { callback(currTime + timeToCall); }, timeToCall); lastTime = currTime + timeToCall; return id; }; if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function(id) { clearTimeout(id); }; }());
Здесь код определяет, использовать ли задержку 4 мс или 16 мс, чтобы лучше всего соответствовать 60 кадрам в секунду. Также поддерживается метод отмены.
Заявление об авторских правах: Содержание этой статьи добровольно предоставлено пользователями Интернета, а мнения, выраженные в этой статье, представляют собой только точку зрения автора. Данный сайт лишь предоставляет услуги по хранению информации, не имеет никаких прав собственности и не несет соответствующей юридической ответственности. Если вы обнаружите на этом сайте какое-либо подозрительное нарушение авторских прав/незаконный контент, отправьте электронное письмо, чтобы сообщить. После проверки этот сайт будет немедленно удален.
Издатель: Full stack программист и руководитель стека, укажите источник для перепечатки: https://javaforall.cn/181811.html Исходная ссылка: https://javaforall.cn