天天看點

【原】移動web動畫設計的一點心得——css3實作跑步

說完題外話,開始近期的主題動畫設計。雖然css3動畫基礎知識學習過,但以前項目使用場景比較少,并沒有太多的實踐,加入新團隊以來,做得幾個項目與動畫有關,嘗試用css3來實作,過程中遇到了不少坑。

大學學過一個月畫畫,但沒有這方面天賦,連簡單卡通動畫也畫不好,于是在國外網站找來如下動畫,利用它來做例子,并把這次用 css3 實作動畫的原理分享給大家~

【原】移動web動畫設計的一點心得——css3實作跑步

回到項目需求,要實作類似上圖卡通人物跑步動畫,分析結果如下:

1.跑步動畫可以應用在不同的場景

要求人物的背景是透明的,圖檔保證高清,避免邊緣雜邊

2.跑步動畫運動速度與動作成正比關系

人物跑步速度越快,身體動作越快;人物跑步速度為零時,身體動作馬上停止在目前的狀态

3.跑步動畫效果流暢

不會出現卡頓現象

用ps打開該大師的 gif 圖,在時間軸視窗中有 24 張不同的圖檔,通過一幀一幀的播放來實作跑步動畫,很簡單得說明做一個精細的動畫需要多費點心思和勞動力啊,向大師表示敬禮~

【原】移動web動畫設計的一點心得——css3實作跑步

項目組要求的動畫跟上圖人物大小差不多,一開始跟互動和視覺的同僚讨論時,嘗試使用 gif 來實作動畫,使用7張圖檔輪播,間隔 0.2 秒可滿足的動畫效果,簡單實作如下:

【原】移動web動畫設計的一點心得——css3實作跑步
【原】移動web動畫設計的一點心得——css3實作跑步

分析下gif動畫

好處:實作簡單、可維護性高、工作成本低

缺點:隻适合簡單的動畫效果,不能動态控制動畫

那麼項目的硬性要求(控制動畫的暫停、速度等)讓我放棄了對gif實作跑步的想法~

放棄了 gif,而 swf 也不是我們的選擇,canvas 實作也是可以的,這裡不做介紹,本次主題是 css3 動畫~

方式一:通過切換 7 張圖檔來實作

【原】移動web動畫設計的一點心得——css3實作跑步
【原】移動web動畫設計的一點心得——css3實作跑步

方式二:7 張圖檔合成 1 張,通過切換背景圖檔位置來實作

【原】移動web動畫設計的一點心得——css3實作跑步
【原】移動web動畫設計的一點心得——css3實作跑步
【原】移動web動畫設計的一點心得——css3實作跑步

分析這2種方式

方式一:

實作起來會比較簡單,但帶來額外的 7 個請求數

7 張圖檔總大小為:50k

方式二:

需要設計雪碧圖,并量取背景位置,請求數少

雪碧圖大小為:37k

可以看出多張圖檔合成的雪碧圖比 7 張圖檔還少 13k 外,還可以減少 7 個http請求,那麼切換背景位置方式是比較好的,代碼如下:

html:

css:

【原】移動web動畫設計的一點心得——css3實作跑步
【原】移動web動畫設計的一點心得——css3實作跑步

加快跑步速度:可以通過快速切換背景圖檔位置,animation-duration 可以控制動畫運作的時間,那麼減少動畫的時間可以提升跑步的速度,通過在父級動态加載不同的功能 class 來運作不同的動畫,進而改變跑步速度

【原】移動web動畫設計的一點心得——css3實作跑步

詳細内容請看代碼,留意注釋

【原】移動web動畫設計的一點心得——css3實作跑步
【原】移動web動畫設計的一點心得——css3實作跑步

css:

【原】移動web動畫設計的一點心得——css3實作跑步
【原】移動web動畫設計的一點心得——css3實作跑步

暫停跑步:使用 animation-play-state:paused 可以暫停正在進行的動畫,并停留到目前的動作,那麼當使用者停止操作時,給父級加上功能 class 來停止動畫

【原】移動web動畫設計的一點心得——css3實作跑步

最後再通過 js 控制不同的跑步速度。

jquery:

【原】移動web動畫設計的一點心得——css3實作跑步
【原】移動web動畫設計的一點心得——css3實作跑步

最後界面:

【原】移動web動畫設計的一點心得——css3實作跑步

animation 适合相對簡單的動畫,使用起來比較靈活,如支援切換不同的動畫名、暫定動畫等

animation-timing-function 的 step-start 屬性等不完全支援 android 2.1~4.3 、ios 4.3 系統

ok~ 跑步動畫到此結束,下期來個拆信封的動畫,敬請期待~

作者:白樹