理解requestAnimationFrame

一般我們繪畫動畫會使用計時器罪佳,動畫的形成本身就是一幀一幀的畫面按照一定的速度展示出來政敢,使用計時器就是為了把渲染出來的圖像按照我們能感知到的速度展示出來挽牢,例如一個旋轉(zhuǎn)動畫摆舟,需要把旋轉(zhuǎn)圖片拆分成幾個旋轉(zhuǎn)90°的動作,使用計時器一步一步旋轉(zhuǎn)以達到用戶能看到的旋轉(zhuǎn)效果噪服。
但是這里就會出現(xiàn)一些問題毡泻,每臺設(shè)備的渲染幀頻率不會完全相同,動畫渲染不一粘优,可能出現(xiàn)不流暢的情況牙捉,如果是一些性能較差的低配手機,甚至?xí)那闆r敬飒。

setTimeout

一般動畫編寫我們會使用setTimeout這個函數(shù),但是利用seTimeout實現(xiàn)的動畫在一些低端機上會出現(xiàn)失幀芬位、卡頓无拗、抖動等現(xiàn)象。 產(chǎn)生有兩個原因:

  • setTimeout的執(zhí)行時間并不是確定的昧碉。在Javascript中英染, setTimeout 任務(wù)被放進了異步隊列中,只有當(dāng)主線程上的任務(wù)執(zhí)行完以后被饿,才會去檢查該隊列里的任務(wù)是否需要開始執(zhí)行四康,因此 setTimeout 的實際執(zhí)行時間一般要比其設(shè)定的時間晚一些。

  • 上面我們提到的一點:每臺設(shè)備的渲染幀頻率不會完全相同狭握,動畫渲染不一闪金,刷新頻率又受屏幕分辨率和屏幕尺寸的影響,setTimeout只能設(shè)置一個固定的時間間隔,這個時間不一定和屏幕的刷新時間吻合哎垦。

setTimeout執(zhí)行的圖像變化并不是馬上反應(yīng)到屏幕囱嫩,這個變化必須要等到屏幕下次刷新時才會被更新到屏幕上。如果我們定義的時間和屏幕的刷新時間步調(diào)不一致漏设,就可能會導(dǎo)致中間某一幀的操作被跨越過去墨闲,而直接更新下一幀的圖像,從而導(dǎo)致失幀郑口。

requestAnimationFrame

requestAnimationFrame是html5提供的的一個叫請求動畫幀的api鸳碧。這個api是根據(jù)系統(tǒng)渲染屏幕時間來調(diào)用的,每渲染一次就調(diào)用一次犬性,這樣就保證了幀數(shù)完整地執(zhí)行并且不會失幀瞻离。

function animate() {
  left ++
  console.log("animation");
  if (left <50) {
    window.requestAnimationFrame(animate);
  }
 }
//第一幀渲染
window.requestAnimationFrame(animate);

兼容:

var requestAnimationFrame = window.requestAnimationFrame ||
                window.webkitRequestAnimationFrame ||
                window.mozRequestAnimationFrame ||
                window.oRequestAnimationFrame ||
                window.msRequestAnimationFrame ||
                function(callback){window.setTimeout(callback,1000/60);};

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市仔夺,隨后出現(xiàn)的幾起案子琐脏,更是在濱河造成了極大的恐慌,老刑警劉巖缸兔,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件日裙,死亡現(xiàn)場離奇詭異,居然都是意外死亡惰蜜,警方通過查閱死者的電腦和手機昂拂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抛猖,“玉大人格侯,你說我怎么就攤上這事〔浦” “怎么了联四?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長撑教。 經(jīng)常有香客問我朝墩,道長,這世上最難降的妖魔是什么伟姐? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任收苏,我火速辦了婚禮,結(jié)果婚禮上愤兵,老公的妹妹穿的比我還像新娘鹿霸。我一直安慰自己,他們只是感情好秆乳,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布懦鼠。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪葛闷。 梳的紋絲不亂的頭發(fā)上憋槐,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音淑趾,去河邊找鬼阳仔。 笑死,一個胖子當(dāng)著我的面吹牛扣泊,可吹牛的內(nèi)容都是我干的近范。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼延蟹,長吁一口氣:“原來是場噩夢啊……” “哼评矩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起阱飘,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤斥杜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后沥匈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔗喂,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年高帖,在試婚紗的時候發(fā)現(xiàn)自己被綠了缰儿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡散址,死狀恐怖乖阵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情预麸,我是刑警寧澤瞪浸,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站吏祸,受9級特大地震影響默终,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜犁罩,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望两疚。 院中可真熱鬧床估,春花似錦、人聲如沸诱渤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至递胧,卻和暖如春碑韵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缎脾。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工祝闻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人遗菠。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓联喘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親辙纬。 傳聞我的和親對象是個殘疾皇子豁遭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容