亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

章節
問答
課簽
筆記
評論
占位
占位

動畫思路

jQuery 的動畫為了穩定與兼容的的選擇,所以即使在目前的 2.1.1 的版本中也是采用的幀動畫而不是最新的 CSS3 動畫,至于原因當然有很多我們這里就只涉及框架的幀動畫的處理,幀動畫的實現動畫的原理跟動畫片的制作一樣。動畫片是把一些差距不大的原畫以一定幀數播放, js 動畫是靠連續改變元素的某個 css 屬性值,比如 left, top 達到視覺的動畫效果。

book.animate({
    left: '+=50',
}).animate({
    left: '+=100',
}).animate({
    left: '-=50',
});

這里是一組最簡單的動畫,但是在設計上會有一個最重要的問題:

因為動畫是異步的,但是 animate 方法的鏈式代碼是同步的,所以這里要涉及一個最重要的問題,動畫隊列要如何有序的調用?

傳統的思路

  • 定時器 setTimeout 方法收集,用一個數組保存每一個 animate 方法,把 animate 方法排成隊列,在之后開始執行動畫。
  • 這里存在的一個嚴重的問題,讓定時器產生足夠長的時間差,在這個時間差內去收集 animate 方法,那么這個時間差需要多長?顯而易見這樣的思路不是非常的精確。

jQuery 為動畫量身定制了隊列機制,我們的思路可以是這樣

  • 有一個隊列,在執行第一個 animate 方法的時候加入隊列就開始執行動畫,因為動畫自己在執行的時候就會產生異步的時間差
  • 我們在這個時間差的里面繼續去加入之后的動畫 animate 進去隊列,然后在每一個動畫結束之后去取出隊列中的第一個 animate 方法開始執行,依次循環下去

總結

兩方方法都是利用異步收集同步的代碼,區別就是一個是靠定時器,一個是靠動畫自身,所以在精確度上來說顯然是動畫自身控制是最合理的。好比我們去面試,面試官只要讓每一個面試完畢的人去通知后面的人繼續進來面試一樣,如此反復

右邊代碼,請在支持 webkit 的瀏覽器下面調試,谷歌、急速360。

任務

?不會了怎么辦
||

提問題

寫筆記

公開筆記
提交
||

請驗證,完成請求

由于請求次數過多,請先驗證,完成再次請求

加群二維碼

打開微信掃碼自動綁定

您還未綁定服務號

綁定后可得到

  • · 粉絲專屬優惠福利
  • · 大咖直播交流干貨
  • · 課程更新,問題答復提醒
  • · 賬號支付安全提醒

收藏課程后,能更快找到我哦~

使用 Ctrl+D 可將課程添加到書簽

邀請您關注公眾號
關注后,及時獲悉本課程動態

舉報

0/150
提交
取消
全部 精華 我要發布
全部 我要發布
最熱 最新
只看我的

手記推薦

更多

本次提問將花費2個積分

你的積分不足,無法發表

為什么扣積分?

本次提問將花費2個積分

繼續發表請點擊 "確定"

為什么扣積分?