第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

章節(jié)
問答
課簽
筆記
評論
占位
占位

動畫實現(xiàn)

在動畫算法與設計的小節(jié)中我都把動畫一些相關的東西單獨提出來分析了,其實 jQuery 的動畫的原理就是這樣的,這一節(jié)我們把設計與算法融合在一起來實現(xiàn)一個偽 jQuery 的動畫模塊。

在 jQuery 的設計中 ready、ajax、動畫都是支持 Promise 這個概念的,也就是通過 Deferred 提供了一個抽象的非阻塞的解決方案,它創(chuàng)建一個 promise 對象,其目的是在未來某個時間點返回一個響應,對應的也就是 done、fail、progress、complete、always等方法,所以在第一部分理解 Deferred 對象是非常重要的,這樣才能讀懂這類設計。

具體的代碼我們可以如右圖所示,這里我們開始解釋下其設計的目的。

book.animate({
    left: '500'
}, {
    duration: 2000
})

就這個動畫而言,我們要涉及幾個問題,left:500 其實是最終的坐標值。

那么完成這個 left 動畫我們至少需要:

  • 起點位置
  • 終點位置
  • 運動的時間
  • 每次定時器改變的坐標值
  • 單位的換算(px、em、%)

每一種屬性其實都是有各自的變換的一個算法,包括計算開始值、變化值、時間等等,所以我們必須給每一個變換的屬性都進行一個包裝,用來封裝各自的相關數(shù)據(jù),那么我們其實可以用一個類來構造跟屬性變化相關的一些信息,如 Tween 類。

通過一個 Tween 類構造出來的緩動對象,其實就是針對每一個屬性的封裝對象,這樣我們只需要設計一個定時器,在指定的時間內(nèi)調(diào)用 Tween 生成的這些對象就可以了,Tween 內(nèi)部控制著各自屬性的狀態(tài)改變。


具體右邊的實現(xiàn)代碼涉及了如下幾個部分了:

  1. Animation 函數(shù),入口函數(shù)用來做一些參數(shù)的初始化工作,整個動畫的開始調(diào)度
  2. animation 對象就是實際的動畫對象了,通過 Animation 函數(shù)創(chuàng)建,這個對象上實現(xiàn)了所有屬性與方法
  3. new Tween() 通過 Tween 創(chuàng)建每一個屬性對象相關的數(shù)據(jù)
  4. animation.tweens 保存了每一個屬性對象的容器
  5. Animation.fx 就是具體開始動畫執(zhí)行的調(diào)用的一個調(diào)度對象了
  6. 定時器都是執(zhí)行一個回調(diào)函數(shù)的,tick 就是定時器執(zhí)行的回調(diào),在 tick 函數(shù)中通過計算出變化數(shù)據(jù),然后通過循環(huán) animation.tweens 中的每一個動畫屬性對象,來實現(xiàn)改變

其實動畫的整個設計就是這么簡單的,代碼的復雜是因為還兼容了各種不同情況的處理,比如實現(xiàn) deferred 機制,針對寬高變化的 overflow 處理,針對 display 為 inline 情況下的處理,那么這些都是一些預處理的機制,在對應的 defaultPrefilter 函數(shù)中就能找到,我們沒有必要是單獨實現(xiàn)了。

其實動畫的設計,我們可以學到一個很重要的一點: 封裝變化,把每一個屬性變化都獨立封裝一個對象,讓其自己管理與控制。

任務

?不會了怎么辦
||

提問題

寫筆記

公開筆記
提交
||

請驗證,完成請求

由于請求次數(shù)過多,請先驗證,完成再次請求

加群二維碼

打開微信掃碼自動綁定

您還未綁定服務號

綁定后可得到

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

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

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

邀請您關注公眾號
關注后,及時獲悉本課程動態(tài)

舉報

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

手記推薦

更多

本次提問將花費2個積分

你的積分不足,無法發(fā)表

為什么扣積分?

本次提問將花費2個積分

繼續(xù)發(fā)表請點擊 "確定"

為什么扣積分?