JavaScript requestAnimationFrame動畫詳解
進入web2.0時代,在網(wǎng)頁中實現(xiàn)動畫已經(jīng)不再局限于一種方法
- 你可以用CSS3的animattion+keyframes;
- 你也可以用css3的transition;
- 你還可以用通過在canvas上作圖來實現(xiàn)動畫,也可以借助jQuery動畫相關的API方便地實現(xiàn);
- 當然最原始的你還可以使用window.setTimout()或者window.setInterval()通過不斷更新元素的狀態(tài)位置等來實現(xiàn)動畫,前提是畫面的更新頻率要達到每秒60次才能讓肉眼看到流暢的動畫效果。
認識JavaScript requestAnimationFrame
首先我們來看一下它的源碼
requestAnimationFrame on github
// Adapted from https://gist.github.com/paulirish/1579671 which derived from
// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
// requestAnimationFrame polyfill by Erik Möller.
// Fixes from Paul Irish, Tino Zijdel, Andrew Mao, Klemen Slavič, Darius Bacon
// MIT license
if (!Date.now)
Date.now = function() { return new Date().getTime(); };
(function() {
'use strict';
var vendors = ['ms', 'moz', 'webkit', 'o'];
//瀏覽器兼容
for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {
//對于支持的瀏覽器直接統(tǒng)一接口
var vp = vendors[i];
window.requestAnimationFrame = window[vp+'RequestAnimationFrame'];
window.cancelAnimationFrame = (window[vp+'CancelAnimationFrame']
|| window[vp+'CancelRequestAnimationFrame']);
}
if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) // iOS6 is buggy
|| !window.requestAnimationFrame || !window.cancelAnimationFrame) {
//對于不支持的瀏覽器退而使用setTimeout和clearTimeout
var lastTime = 0;
window.requestAnimationFrame = function(callback) {
var now = Date.now();
var nextTime = Math.max(lastTime + 16, now);
return setTimeout(function() { callback(lastTime = nextTime); },
nextTime - now);
};
window.cancelAnimationFrame = clearTimeout;
}
}());
相信那一點點源碼的閱讀對大家都沒有問題,就算讀不懂也沒關系,會調(diào)用api就可以了
requestAnimationFrame的優(yōu)點
瀏覽器可以優(yōu)化并行的動畫動作,更合理的重新排列動作序列,并把能夠合并的動作放在一個渲染周期內(nèi)完成,從而呈現(xiàn)出更流暢的動畫效果。比如,通過requestAnimationFrame(),JS動畫能夠和CSS動畫/變換或SVG SMIL動畫同步發(fā)生。另外,如果在一個瀏覽器標簽頁里運行一個動畫,當這個標簽頁不可見時,瀏覽器會暫停它,這會減少CPU,內(nèi)存的壓力,節(jié)省電池電量。
用法示例:
function animate() {
console.log("animation");
window.requestAnimationFrame(animate);
}
animate();

requestAnimationFrame(animate)是關鍵,它為要執(zhí)行的函數(shù)設置了動畫,所以瀏覽器控制臺會一直執(zhí)行animate()函數(shù)。
瀏覽器兼容性

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
url特殊字符編碼encodeURI?VS?encodeURIComponent分析
這篇文章主要介紹了url特殊字符編碼encodeURI?VS?encodeURIComponent分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09
JS實現(xiàn)改變HTML上文字顏色和內(nèi)容的方法
這篇文章主要介紹了JS實現(xiàn)改變HTML上文字顏色和內(nèi)容的方法,涉及JS數(shù)學運算與頁面元素動態(tài)操作相關技巧,需要的朋友可以參考下2016-12-12
Bootstrap選項卡與Masonry插件的完美結(jié)合
這篇文章主要介紹了Bootstrap選項卡與Masonry插件的完美結(jié)合的相關資料,需要的朋友可以參考下2016-07-07

