国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript requestAnimationFrame動畫詳解

2019-11-19 15:26:50
字體:
來源:轉載
供稿:網友

進入web2.0時代,在網頁中實現動畫已經不再局限于一種方法

  • 你可以用CSS3的animattion+keyframes;
  • 你也可以用css3的transition;
  • 你還可以用通過在canvas上作圖來實現動畫,也可以借助jQuery動畫相關的API方便地實現;
  • 當然最原始的你還可以使用window.setTimout()或者window.setInterval()通過不斷更新元素的狀態位置等來實現動畫,前提是畫面的更新頻率要達到每秒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 licenseif (!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) { //對于支持的瀏覽器直接統一接口  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; }}());

相信那一點點源碼的閱讀對大家都沒有問題,就算讀不懂也沒關系,會調用api就可以了

requestAnimationFrame的優點

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

用法示例:

function animate() {  console.log("animation");  window.requestAnimationFrame(animate); }animate();

這里寫圖片描述

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

瀏覽器兼容性

這里寫圖片描述

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 厦门市| 扬中市| 满洲里市| 峡江县| 兰考县| 北宁市| 清流县| 淮阳县| 古交市| 楚雄市| 黔西县| 深圳市| 普洱| 祁东县| 隆昌县| 洪江市| 左云县| 桃园市| 太和县| 健康| 织金县| 寻乌县| 喀什市| 闽清县| 左权县| 九江县| 金华市| 鹤峰县| 德兴市| 翁源县| 罗田县| 扶余县| 滦平县| 当涂县| 贵德县| 赤城县| 深州市| 安溪县| 柘城县| 友谊县| 海淀区|