html5+shim腳本,HTML5探秘:用requestAnimationFrame優化Web動畫

requestAnimationFrame是什么?

在瀏覽器動畫程序中,我們通常使用一個定時器來循環每隔幾毫秒移動目標物體一次,來讓它動起來。如今有一個好消息,瀏覽器開發商們決定:“嗨,為什么我們不在瀏覽器里提供這樣一個API呢,這樣一來我們可以為用戶優化他們的動畫。”所以,這個requestAnimationFrame()函數就是針對動畫效果的API,你可以把它用在DOM上的風格變化或畫布動畫或WebGL中。

使用requestAnimationFrame有什么好處?

瀏覽器可以優化并行的動畫動作,更合理的重新排列動作序列,并把能夠合并的動作放在一個渲染周期內完成,從而呈現出更流暢的動畫效果。比如,通過requestAnimationFrame(),JS動畫能夠和CSS動畫/變換或SVG SMIL動畫同步發生。另外,如果在一個瀏覽器標簽頁里運行一個動畫,當這個標簽頁不可見時,瀏覽器會暫停它,這會減少CPU,內存的壓力,節省電池電量。

requestAnimationFrame的用法

// shim layer with setTimeout fallback

window.requestAnimFrame = (function(){

return window.requestAnimationFrame ||

window.webkitRequestAnimationFrame ||

window.mozRequestAnimationFrame ||

function( callback ){

window.setTimeout(callback, 1000 / 60);

};

})();

// usage:

// instead of setInterval(render, 16) ....

(function animloop(){

requestAnimFrame(animloop);

render();

})();

// place the rAF *before* the render() to assure as close to

// 60fps with the setTimeout fallback.

對requestAnimationFrame更牢靠的封裝

Opera瀏覽器的技術師Erik M?ller?把這個函數進行了封裝,使得它能更好的兼容各種瀏覽器。你可以讀一讀這篇文章,但基本上他的代碼就是判斷使用4ms還是16ms的延遲,來最佳匹配60fps。下面就是這段代碼,你可以使用它,但請注意,這段代碼里使用的是標準函數,我給它加上了兼容各種瀏覽器引擎前綴。

(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);

};

}());

我來看看使用requestAnimationFrame的效果

requestAnimationFrame API

window.requestAnimationFrame(function(/* time */ time){

// time ~= +new Date // the unix time

});

回調函數里的參數可以傳入時間。

各種瀏覽器對requestAnimationFrame的支持情況

谷歌瀏覽器,火狐瀏覽器,IE10+都實現了這個函數,即使你的瀏覽器很古老,上面的對requestAnimationFrame封裝也能讓這個方法在IE8/9上不出錯。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533126.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533126.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533126.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機科學與技術的專業論述,關于計算機科學專業的論文題目 計算機科學專業論文題目怎樣定...

【100道】關于關于計算機科學專業的論文題目匯總,作為大學生的畢業生應該明白了計算機科學專業論文題目怎樣定,選一個好的題目后續的計算機科學專業論文寫作起來會更輕松&#xff01;一、比較好寫的計算機科學專業論文題目:1、計算機科學與技術專業應用型人才培養改革調研分析—…

ming window 交叉編譯_opencv3編譯pc端及交叉編譯arm端

環境&#xff1a; opensuse opencv3.4.1 交叉編譯器arm-openwrt-linux 作者&#xff1a;帥得不敢出門https://github.com/opencv/opencv/tree/3.4.1選擇右邊的"clone or download"按鈕進行下載&#xff0c;選擇下載zip我下的是opencv-3.4.1.zip, 3.4.1的版本號…

鎖定計算機 背景圖片,win7系統電腦更換鎖屏壁紙的方法

當win7系統電腦在一段時間不動的話就進入鎖屏狀態&#xff0c;然而很多用戶覺得默認的鎖屏壁紙不好看&#xff0c;就想要更換自己喜歡的鎖屏壁紙&#xff0c;那么win7怎么更換鎖屏壁紙呢&#xff1f;下面給大家講解一下win7系統電腦更換鎖屏壁紙的方法。1、同時按下窗口鍵winR組…

兩階段最小二乘法原理_R語言代寫工具變量與兩階段最小二乘法

我們要估計的模型是yabxcdeyabxcde&#xff0c;其中是解釋變量&#xff0c;&#xff0c;和是我們想要估計的系數。是控制變量&#xff0c;是治療變量。我們特別關注我們的治療效果對。生成數據首先&#xff0c;讓我們生成數據。假設 的工具變量和之間的相關矩陣如下&#xff1a…

計算機二級循環隊列知識點,考點!計算機二級考試公共基礎知識沖刺復習筆記:棧、隊列和循環隊列...

小編所收集到的相關計算機二級考試公共基礎知識沖刺復習筆記&#xff1a;棧、隊列和循環隊列的資料 大家要認真閱讀哦&#xff01;1、棧(Stack)又稱堆棧。(1)棧是一種運算受限的線性表&#xff0c;其限制是僅允許在表的一端進行插入和刪除運算。人們把此端稱為棧頂&#xff0c;…

lua 字符串包含_Programming in Lualua學習第11期 Lua模塊與包

微信公眾號&#xff1a;GameToolDev關注可了解更多的游戲工具開發教程。問題或建議&#xff0c;請公眾號留言;從Lua 5.1開始&#xff0c;我們可以使用require和module函數來獲取和創建Lua中的模塊。從使用者的角度來看&#xff0c;一個模塊就是一個程序庫&#xff0c;可以通過r…

學計算機優盤多少內存夠用,u盤建議買多大內存的

大家好&#xff0c;我是時間財富網智能客服時間君&#xff0c;上述問題將由我為大家進行解答。u盤建議買多大內存主要看用途&#xff0c;一般容量為&#xff1a;1G、2G、4G、8G、16G、32G、64G、128G、256G、512G、1T&#xff0c;具體來說&#xff1a;1、如果是用來存放視頻的&…

.net 從txt中讀取行數據_【VBA項目】從指定文件中讀取數據并繪制圖表

VBA 是一種很久遠的編程語言&#xff0c;但并不過時。在滿足以下兩個條件時&#xff0c;借助 VBA 可以極大的提升生產率&#xff0c;降低出錯率&#xff1a;你的電腦上不允許自主安裝軟件&#xff1b; 你需要執行的工作中大部分的步驟都是固定且重復的。項目背景近期接到一個工…

本地攝像頭應用到遠程計算機,遠程攝像頭設置

可以的&#xff0c;智能家用監控攝像頭&#xff0c;只要你手機有網&#xff0c;千里之外打開手機都可以查看視頻&#xff0c;而且智能攝像頭主要用于看家看孩子看老人照看貓貓狗狗等寵物的。智能攝像頭&#xff0c;與市面上普通的事件錄制不一樣&#xff0c;它可以實現7*24小時…

axure實現復選框全選_jq簡單的全選、反選和全不選效果

jquery是很實用和方便的前端效果庫&#xff0c;可以讓我減少很多的操作和節省很多的時間。今天&#xff0c;我們來說一下jq的全選、全不選和反選效果&#xff0c;本篇講的是最簡單簡潔的jq全選、全不選和反選的例子。如果還有什么其他的功能要求可自己根據所學到的基礎來擴展一…

計算機設備管理器驅動,設備管理器安裝驅動程序的詳細教程

系統出現問題&#xff0c;很多人都會選擇重裝系統。但系統重裝后&#xff0c;我們所做的第一件事&#xff0c;就是安裝驅動。有的驅動程序有安裝包&#xff0c;直接安裝就行了。但是有的驅動是只有驅動程序文件&#xff0c;而沒有執行程序&#xff0c;這時候就需要通過設備管理…

ef執行原生sql語句_EF Core中執行原生SQL語句

一、課程介紹之所以今天錄制這個系列文章的主要原因是&#xff0c;想在快速幫助到大家上手在ASP.NET Core WebAPI中結合EF Core來操作我們的數據庫。EF Core的基礎文章和基礎課程實在是太多了&#xff0c;那么阿笨既然也來錄制這個系列課堂&#xff0c;阿笨想必肯定會給大家帶來…

華立學院計算機組成原理考試,廣東工業大學華立學院計算機組成原理期末復習重點...

廣工華立-2015-2016學年度-計算機組成原理考試復習一、考試題型&#xff1a;分為選擇、判斷、填空、簡述題四大類。其中選擇題有大約三分之一送分&#xff0c;大題占了50分、題目從課后作業出、重點大題為&#xff1a;指令方面&#xff1b;芯片連接&#xff1b;硬盤計算外存&am…

電路串聯和并聯圖解_一個關于交流電路諧振現象的仿真實驗

對于一個具有電阻、電感、電容的交流電路中&#xff0c;交流電源兩端的電壓一般不和它輸出的電流同相位。如果調節電路的參數或者電源頻率使它們同相位&#xff0c;這時電路就發生了諧振現象。按照發生諧振現象的電路不同&#xff0c;可以分為串聯諧振和并聯諧振。1、串聯諧振在…

sync不生效 vue_Vue實戰項目-記賬器-重要知識點匯總

歷時3周&#xff0c;記賬器項目終于可以運行了&#xff0c;這次項目是基于Vue開發&#xff0c;用到了typeScript和Scss,下面基于項目做一個階段性的總結&#xff0c;回顧一下項目中用到的知識點。一.組件一開始用的是JS對象的寫法&#xff1a;構造選項&#xff1a;{ data(){ret…

開設計算機課程的必要性,學前教育專業開設計算機音樂制作課程的必要性與可行性...

學前教育專業開設計算機音樂制作課程的必要性與可行性李 萍430061【期刊名稱】課程教育研究【年(卷),期】2012(000)020【總頁數】1一、學前教育專業開設音樂相關課程的現狀二、現代教育的新型特點&#xff0c;計算機音樂及制作的發展概況三、計算機音樂制作在學前教育專業開設的…

fifo頁面置換算法設計思路_千萬級并發!如何設計一個多級緩存系統?

什么是一個多級緩存系統?它有什么用?我們又如何設計一個多級緩存系統?圖片來自 Pexels所謂多級緩存系統&#xff0c;就是指在一個系統的不同的架構層級進行數據緩存&#xff0c;以提升訪問效率。我們都知道&#xff0c;一個緩存系統&#xff0c;它面臨著許多問題&#xff0c…

廣東省計算機學校哪所最好,廣東省哪個技校比較好哪里好

湖北省有少數大中專院校在教育事業中&#xff0c;無論是投入還是創辦教育學院&#xff0c;都比較好&#xff0c;的話就是至少能賺到三成。至于那些綜合性、公益性大的院校&#xff0c;可能要好幾千塊錢不是問題&#xff0c;畢竟我們是藝術類的&#xff0c;所以畢竟整體上看&…

apple quicktime怎么在ppt中用_PPT情感專題大賞No. 007:一份這就是街舞第三季主題PPT(上集)...

Hello&#xff0c;大家好&#xff0c;這里是千師傅小作坊第35期&#xff0c;我是你們的老朋友千千。熟悉千師傅小作坊的人都知道&#xff0c;千師傅特別喜歡看綜藝&#xff0c;尤其是音樂、表演、舞蹈類。作為一個十八線PPT設計師&#xff0c;如果我看到好看的節目視覺設計&…

計算機語言低下限高上限,學習語言有沒有上限

學習語言有沒有上限科學家普遍認為&#xff0c;語言是人類特有的認知天賦的一部分&#xff0c;所以長期以來&#xff0c;科學家一直在研究疾病和創傷如何削弱語言能力。但是&#xff0c;直到現在&#xff0c;科學家仍不清楚一個人最多能掌握多少種語言。在經過長期沉默后&#…