1. 程式人生 > >【第1165期】H5動畫:軌跡移動

【第1165期】H5動畫:軌跡移動

前言

前一段時間被各種H5總結刷屏,除了內容以及設計之外在動畫方面在其表現方面也起到了很大的加持作用,漸漸的動畫也成為了一個產品所不可缺少的一個元素。2017年1月11號早讀文章由凹凸實驗室@Avin授權分享。

正文從這開始~

動畫,是指由許多幀靜止的畫面,以一定的速度(如每秒16張)連續播放時,肉眼因視覺殘象產生錯覺,而誤以為畫面活動的作品。

在 Web 開發中,經常需要實現各種動畫效果,例如:移動、變形、透明度變化等,今天我們主要來討論各種移動的實現。

直線移動

640?wx_fmt=png&wxfrom=5&wx_lazy=1

straight-line

通常可以直接由各個點的位置,以及到點的時間與整個動畫持續時間的比值,寫出類似下面的程式碼並可實現動畫。

.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);}}

曲線移動

0?wx_fmt=png
curve

在 CSS 中可以通過transform-origin配合rotate實現曲線移動,不過這種曲線都是圓的一部分且不太好控制。

這種移動我們可以把它拆分成兩個方向的運動疊加,如

0?wx_fmt=gif
curve-gif

更詳細的說明可以參考這篇文章《curved-path-animations-in-css》。

路徑移動

0?wx_fmt=png
path

這也是曲線移動,但是想像上面那樣,這個很難拆分成幾個方向的運動疊加。這樣的移動路徑可以嘗試以下幾個方法:

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><animateMotionxlink:href="#cray"dur="5s"begin="0s"fill="freeze"repeatCount="indefinite"rotate="auto-reverse"><mpathxlink:href="#motionPath"/></animateMotion></svg>

效果:

0?wx_fmt=gif
cray-gif

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,可以匯出這樣結構的資料

0?wx_fmt=png
ae

從屬性名字可以判斷出來X_POSITIONY_POSITIONxy的位置資訊,而key_values裡的data就是我們需要的點位置該點的時間與持續時間的比值可以根據start_frame得出,寫個指令碼把這些資料處理下,可得到類似下面的 CSS 程式碼

0?wx_fmt=jpeg
ae-css

設定的關鍵幀越多,動畫會越流暢,但 CSS 也會增多。

注意:不是 AE 關鍵幀裡所有的資訊都可以匯出來,還跟 AE 裡使用的過渡屬性有關,這裡有介紹。

最後,總結一下,移動動畫就是用一種合適的方式把時間和位置的變化關係展示出來。除了上面方法,肯定還有很多其他的方法和幫助工具。

大家常用的動畫庫會有哪些呢?歡迎推薦~

最後,為你推薦

關於本文
作者:@Avin
原文:https://aotu.io/notes/2017/11/06/path-animation/

0?wx_fmt=jpeg

相關推薦

1165H5動畫軌跡移動

前言前一段時間被各種H5總結刷屏,除了內容以及設計之外在動畫方面在其表現方面也起到了很大的加持作

玩轉 React 03邂逅 React 元件

上期回顧 前文我們講解了 React 模板 JSX,接著我們繼續來看看 React 元件又是如何工作的呢? 元件化開發到了今天已經是大家的共識,在 React 中,元件同樣也是組成我們整個專案的基本單元。 react 中元件可以將UI切分成一些的獨立的、可複用的部件。元件

四組典型場景查看導入的圖片,工作序號001,2017/7/6

想要 新的 掃描 app 場景 照片 工作 背景 一個地方 場景 工作項序號001:查看導入的圖片,最後修改時間:2017/7/6 1. 背景 1) 典型用戶:羅小歐[主要]、朱小葉[主要] 2) 用戶的需求/迫切需要解決的問題 a. 羅小歐:出去玩拍了好多照片,想要在一個

前端特效03|果汁混合效果-上

前幾天有一個熱心的小夥伴找到我說,我看到一個很好看的效果,可不可以講講? 這種要求我向來是不會拒絕的,於是就有了今天的案例。同樣,大家以後如果有什麼想要了解的效果的話,也可以在下方留言給我,說不定我的下一個視訊講解就是你想要的案例哦...   先上圖看看卡哇伊的設計: 當然光看靜圖沒什麼

前端特效02|多功能提交按鈕

話說提交按鈕可能是我們工作生活中最常見的東西了,比如我現在在寫這篇文章,下面就有一個大大的按鈕,甭管上面寫的什麼文字,我知道點了那個按鈕,我這篇文章就算是發出去了。所以按鈕的作用可見一斑。 但是一般的按鈕是很難滿足我們所有的需求的,或者說很難滿足使用者的心理預期的。 從設計的角度出

1159CSS預載入Preload

前言看天氣預報,今天好多地方都開始下雪了。今日早讀文章由@李斌分享。正文從這開始~Preload

1139基於Gitlab CI搭建持續整合環境

前言本文是在12月12號迅雷@趙兵在前端早讀課第三期Live中提到的關於CI構建的,可能這部分在

1182Canvas or SVG?一張好圖,兩手準備,就在 ECharts 4.0

前言在百度的 ECharts 團隊釋出了時隔兩年的大版本 ECharts 4.0 後,準備將專案

1145打造高可靠與高效能的React同構解決方案

前言本文為第12屆D2前端技術論壇《打造高可靠與高效能的React同構解決方案》分享內容,已經過

1166Ant Design 3.0 背後的故事(含演講視訊)

前言鑑於最近有兩個產品用到了這個Ant Design,本著好奇心就想了解這款產品的故事,可真是湊

牛九心得1什麽是指數基金?

基本 不定 定期 為什麽 簡單 image 風險 策略 https (本篇文章閱讀時間約3分鐘) 大家好,我是牛九老師,接下來和大家一起討論一下,什麽是指數基金,以及咱們為什麽選擇投資指數基金? 首先,“股票”大家都知道的,很多身邊的朋友都炒過股

牛九心得2巴菲特的10年賭約你知道嗎?

-i class gem 超過 二維碼 高達 height 公眾號 package (本篇文章閱讀時間約3分鐘) 大家好,我是牛九老師。 每天我會給大家分享自己的投資心得,幫助他人,分享自己。 今天給大家介紹一下巴菲特的10年賭約。 巴菲特老

牛九心得3你想不想也成為富人?

ont 好書 成長 ebp 時間 -c tar 幫助 -o (本文閱讀時間約3分鐘,老師每天都會把自己的心得分享給大家,文章都是自己一字一字親手打出來的,希望能幫助到大家) 大家好,我是牛九老師,接下來和大家一起討論一下,如何能成為富人?

iOS開發-51案例學習動畫新寫法、刪除子視圖、視圖順序、延遲方法、button多功能使用方法及icon圖標和啟動頁設置

無法查看 font targe 技術 value lstat tostring sta dict 案例效果: (1)導入所需的素材,然後用storyboard把上半截位置和大小相對固定的東西布局起來。當然,這些控件也要定義成對應地IBOutlet和IBActio

進擊的Python九章paramiko模塊、線程與進程、各種線程鎖、queue隊列、生產者消費者模型

password locking form maxsize 廁所 sorted [0 hostname nbsp 一、paramiko模塊 他是什麽東西?   paramiko模塊是用python語言寫的一個模塊,遵循SSH2協議,支持以加密和認證的方式,進行遠程服務器的連

Python開發六篇Python基礎條件和循環

ora back strong als 重復執行 操作 enume 條件表達式 服務 目錄 一、if語句 1、功能 2、語法 單分支,單重條件判斷 多分支,多重條件判斷 if + else 多分支if + elif + else 語句小結 + 案例 三元表達式 二、whil

Python開發五篇Python基礎之2

對齊方式 dex 字符串 後退 ring lag nic 有效 func 字符串格式化 Python的字符串格式化有兩種方式: 百分號方式、format方式 百分號的方式相對來說比較老,而format方式則是比較先進的方式,企圖替換古老的方式,目前兩者並存。[PEP-310

Python開發四篇Python基礎之函數

nco pos *args 更強 三元 sequence hunk ins att 三元運算 三元運算(三目運算),是對簡單的條件語句的縮寫。 # 書寫格式 result = 值1 if 條件 else 值2 # 如果條件成立,那麽將 “值1” 賦值給result

Python之路五篇面向對象及相關

訪問 遊戲 font raise 內置 無法 sys 接下來 print 面向對象基礎 基礎內容介紹詳見一下兩篇博文: 面向對象初級篇 面向對象進階篇 其他相關 一、isinstance(obj, cls) 檢查是否obj是否是類 cls 的對象 class F

四組交互設計文檔 || 最後修改日期07/29/17

文件夾 發送 bar box 新頁面 添加圖片 修改 反饋 com 一、圖庫頁面 1. 圖庫:點擊後會轉入頁面一(本頁) 2. 回憶:點擊後會轉入頁面九 3. 添加圖片來源:點擊後會轉入頁面二 4. 刷新:點擊後會刷新頁面一,停留在本頁(如果新圖片,新狀態見頁面七) 5.