【第1165期】H5動畫:軌跡移動
前言
前一段時間被各種H5總結刷屏,除了內容以及設計之外在動畫方面在其表現方面也起到了很大的加持作用,漸漸的動畫也成為了一個產品所不可缺少的一個元素。2017年1月11號早讀文章由凹凸實驗室@Avin授權分享。
正文從這開始~
動畫,是指由許多幀靜止的畫面,以一定的速度(如每秒16張)連續播放時,肉眼因視覺殘象產生錯覺,而誤以為畫面活動的作品。
在 Web 開發中,經常需要實現各種動畫效果,例如:移動、變形、透明度變化等,今天我們主要來討論各種移動的實現。
直線移動
通常可以直接由各個點的位置,以及到點的時間與整個動畫持續時間的比值,寫出類似下面的程式碼並可實現動畫。
.cray {
animation: move 2s alternate infinite;
}
@keyframes move {
0% { transform: translate(0, 0); }
30% { transform: translate(100px, 0); }
60% { transform: translate(100px, 100px); }
100% { transform: translate(200px, 0); }
}
曲線移動
在 CSS 中可以通過 transform-origin
配合 rotate
實現曲線移動,不過這種 曲線
都是圓的一部分且不太好控制。
這種移動我們可以把它拆分成兩個方向的運動疊加,如
更詳細的說明可以參考這篇文章 《curved-path-animations-in-css》。
路徑移動
這也是曲線移動,但是想像上面那樣,這個很難拆分成幾個方向的運動疊加。這樣的移動路徑可以嘗試以下幾個方法:
SVG Animation
這樣的路徑可以比較好的用 SVG path 來描述,然後使用 SVG Animation 做跟隨動畫,並可以達到預期的軌跡效果。
主要程式碼(線上示例):
<svgwidth="420px"height="260px"viewBox="0 0 420 260"version="1.1"xmlns="http://www.w3.org/2000/svg"xmlns:xlink="http://www.w3.org/1999/xlink">
<gstroke="#979797"stroke-width="1"fill="none">
<pathid="motionPath"d="M370.378234,219.713623 C355.497359,218.517659 ..." ></path>
</g>
<gid="cray"transform="translate(0, -24)"stroke="#979797">
<imageid="cray-img"xlink:href="http://7xt5iu.com1.z0.glb.clouddn.com/img/cray.png"x="0"y="0"width="100px"/>
</g>
<animateMotion
xlink:href="#cray"
dur="5s"
begin="0s"
fill="freeze"
repeatCount="indefinite"
rotate="auto-reverse"
>
<mpathxlink:href="#motionPath" />
</animateMotion>
</svg>
效果:
JavaScript
使用 JavaScript 可以直接操作元素進行運動,理論上可以實現任何動畫,只是實現一些複雜的動畫成本比較高,好在有各種已經開發好了的工具庫可以供我們使用。例如,使用 Greensock 的 TweenMax 和 MorphSVGPlugin(收費),通過 MorphSVGPlugin 提供的 pathDataToBezier 方法將 SVG path 轉成曲線陣列,然後給 TweenMax 使用:
var hill = document.getElementById('hill')
var path = MorphSVGPlugin.pathDataToBezier("#motionPath");
TweenMax.to(hill, 5, {
bezier:{
values:path,
type:"cubic",
autoRotate: 180
},
ease:Linear.easeNone,
repeat: -1
})
CSS
實現動畫,其實就是在相應的時間點做相應的“變化”。再回頭看直線移動的實現方式,其實如果能給出足夠多點的位置和該點的時間與持續時間的比值,那其實曲線也可以直接用 CSS 來實現。
很多時候設計師使用 AE 來設計動畫,當我們拿到設計稿後,可以給動畫增加關鍵幀,然後藉助一些工具把關鍵幀的資訊匯出來,這裡介紹一個 keyframes-cli,可以匯出這樣結構的資料
從屬性名字可以判斷出來 X_POSITION
和 Y_POSITION
是 x
和 y
的位置資訊,而 key_values
裡的 data
就是我們需要的點位置
, 該點的時間與持續時間的比值
可以根據 start_frame
得出,寫個指令碼把這些資料處理下,可得到類似下面的 CSS 程式碼
設定的關鍵幀越多,動畫會越流暢,但 CSS 也會增多。
注意:不是 AE 關鍵幀裡所有的資訊都可以匯出來,還跟 AE 裡使用的過渡屬性有關,這裡有介紹。
最後,總結一下,移動動畫就是用一種合適的方式把時間和位置的變化關係展示出來。除了上面方法,肯定還有很多其他的方法和幫助工具。
大家常用的動畫庫會有哪些呢?歡迎推薦~
最後,為你推薦
關於本文
作者:@Avin
原文:https://aotu.io/notes/2017/11/06/path-animation/
相關文章
- H5 動畫:軌跡移動H5動畫
- H5移動端彈幕動畫實現H5動畫
- H5移動端獲獎無縫滾動動畫實現H5動畫
- 移動Web加速技術月報第3期Web
- 移動H5端方案H5
- H5移動端開發H5
- 移動端h5視訊方案H5
- 移動端『H5周曆元件』H5元件
- 移動端H5預載入方案H5
- H5 移動除錯全攻略H5除錯
- 移動H5前端效能優化指南H5前端優化
- 移動端動畫特效開啟加速動畫特效
- Flutter第2天--Animation動畫+粒子運動Flutter動畫
- 移動端H5拉起手機相機H5
- 移動端h5模擬長按事件H5事件
- 移動端H5解惑-概念術語(一)H5
- 移動端H5頁面注意事項H5
- 玩家角色——移動功能和動畫藍圖動畫
- 萬彩動畫大師教程 | 移動動畫自定義加速度動畫
- Win10系統下如何取消移動滑鼠出現指標軌跡Win10指標
- H5實現移動端複製文字功能H5
- 移動端 H5 報表設計準則H5
- 移動端H5解惑-頁面適配(二)H5
- 前端H5移動端響應式介紹前端H5
- 移動端H5多平臺分享實踐H5
- 移動端H5實現圖片上傳H5
- h5在移動開發中的準則H5移動開發
- Leaflet 帶箭頭軌跡以及沿軌跡帶方向的動態marker
- 如何洞悉城市人群移動規律?DataV海量軌跡視覺化實踐解析視覺化
- H5實現移動端語音錄製功能H5
- 超詳細講解H5移動端適配H5
- 移動端H5 實現0.5px邊框H5
- 移動端H5圖片上傳的那些坑H5
- 記一次h5動畫之旅H5動畫
- 移動端 h5 ios不能自動播放音樂的問題:H5iOS
- 【canvas】箭頭跟隨滑鼠移動的動畫原理Canvas動畫
- Flutter的移動端相機快門動畫封裝Flutter動畫封裝
- vue移動端h5適配解決方案(rem or vw)VueH5REM