從0到1,開發乙個動畫庫 2

2021-09-14 03:34:16 字數 1869 閱讀 3430

傳送門:從0到1,開發乙個動畫庫(1)

上一節講到了最基礎的內容,為動畫構建「幀-值」對應的函式關係,完成「由幀到值」的計算過程。這一節將在上節**的基礎上談談如何給乙個完整的動畫新增各類事件。

在新增各類事件之前,我們先對_loop迴圈函式進行一些改進:

_loop()  else if (this.state === 'stop')  else if (this.state === 'init')  else 

}

可以清晰地看到,我們在迴圈中增加了很多態別的判斷,根據state當前不同的狀態執行相應的處理函式:我們新增了_end_stop_reset方法分別去處理結束、暫停和重置這三種狀態,接下來我們依次講解這些狀態的處理。

我們在core類下增加_endendrenderendstate方法,end方法用於主動結束動畫:

end() 

_end()

_renderendstate()

通過執行end方法,我們可以主動結束動畫:如果當前目標處於運動狀態,則將其設定為end,因此下乙個_loop函式被執行的時候,程式就被流向了_end處理函式;若為其他狀態,意味著迴圈沒有被開啟,我們就直接呼叫_end方法,使其直接到終止狀態。

_end函式的作用有三個:

重置動畫的方式也是大同小異,與上面一樣

reset() 

_reset()

_renderinitstate()

讓動畫暫停也是與上述兩者一樣,但唯一的區別是,需要給_renderstopstate方法傳入當前時間進度:

stop()  else 

}_stop(t)

_renderstopstate(t)

我們要在動畫開始執行的時候觸發onplay事件,只需在_play方法內增加一行**即可:

_play() ```
完整**如下:

import tween from './tween';

class core

_init(opt)

_initvalue(value) );

})} _loop() else if (this.state === 'stop') else if (this.state === 'init') else

} _renderfunction(t, d, func)

_renderendstate()

_renderinitstate()

_renderstopstate(t)

_stop(t)

_play()

_end()

_reset()

play()

end()

reset()

stop() else

}}window.timeline = core;

相應地,html的**也更新如下,新增了各類按鈕,主動觸發目標的各類事件:

start

endstop

reset

下一節再見啦^_^

從0到1安裝開發環境

瀏覽器 chrome 版本控制 git 命令列 mac iterm2 windows cmder restful 客戶端 insomnia webpack是一款模組載入器兼打包工具,它能把各種資源,例如js 含jsx coffee 樣式 含less sass 等都作為模組來使用和處理 npm ins...

自己從0到1開發乙個APP需要了解什麼內容

2.考慮資料從 來?1.使用網路雲伺服器 比如現在市場上有的 bmob 後端雲 和 leancloud 這是第三方的伺服器 可以給我們提供一些免費的介面 實現一般情況下的功能是沒有問題的 2.可以自己搭建後台 選擇自己想要的一些資料 這裡可能需要用到一些工具 oss儲存服務,cdn加速等等 當然 你...

如何運營好乙個論壇,從0到1入門

我們是做 教育的,做社群的目的很明確,就是為了滿足我們學員之間的互動交流 在社群裡促活我們使用者。一 制定社群規則 很多人一進入社群其實並不知道這個社群是幹什麼的 怎麼玩,作為運營主要在社群進行引導,可以通過發布社群的公告,介紹社群進入的渠道,如何在社群獲的積分和經驗值。在社群冷啟動的時候,也可以披...