本文在H5動效的常見製做手法的基礎上,對相印的H5動效製做手法進行了擴展和整理,並結合案例談談怎麼將其作得生動。css
視頻類h5能夠帶給用戶動效逼真,流暢的體驗。雖說製做視頻的難度較大,可是瑕不掩瑜,一支視頻能夠儘量地創造出天馬行空的想法,一些短期內沒法經過代碼創造出的酷炫效果。
首先放上兩個案例供你們體驗。html
1) 金館長直播間前端
實現仍是比較簡單的,交互就是經過用戶點擊無縫切換不一樣的視頻,基本每一個能按到的tab均可以對應一支視頻,讓用戶頗有參與感html5
2) QQ錢包二週年web
其中三支視頻的交互在於能夠由用戶拖動滑塊,經過設置currentTime實時控制視頻進度,拖動到末端時觸發視頻播放事件。我以爲也是頗有趣的。canvas
想在H5中靈活運用視頻,必須對video相關的屬性、Api有個大體的瞭解,這裏首先對最基本的進行普及一下。瀏覽器
1) <video>
標籤屬性微信
src
:視頻地址ide
width
height
:視頻寬高(px) h5中可指定爲當前設備屏幕寬高函數
poster
:視頻封面,沒有播放時顯示的圖片
preload
:預加載
autoplay
:自動播放
loop
:循環播放
controls
:瀏覽器自帶的控制條
webkit-playsinline="true"
| playsinline
: 禁止 iPhone Safari 視頻自動全屏
x-webkit-airplay="true"
支持Airplay的設備(如:音箱、Apple TV)播放
<video id="video" src="mov.mp4" preload="auto" poster="" currenttime=0 webkit-playsinline="true" playsinline loop x-webkit-airplay="true" controls autoplay>
2) video DOM
經常使用相關屬性及方法
事件 | 描述 |
---|---|
canplaythrough |
表示資源緩衝完畢,能夠播放 |
durationchange |
資源長度改變,執行一次 |
play |
資源實際開始播放,autoplay 和play() 都會觸發play事件 |
playing |
同上 執行一次 |
pause |
pause() 時觸發 |
progress |
資源播放過程中屢次執行 |
ended |
結束時觸發 loop時不觸發該事件 |
屬性 | 描述 |
---|---|
currentSrc |
返回資源地址 |
currentTime |
返回當前播放進度,可設置 |
duration |
返回資源總時長 |
paused |
資源是否已中止 |
ended |
資源是否已播完 |
方法 | 描述 |
---|---|
play() |
播放資源 |
pause() |
暫停資源 |
load() |
從新加載src指定的資源 |
以上說的是比較經常使用的方法屬性,更詳細的可參考HTML5 Audio/Video 標籤,屬性,方法,事件彙總
說了這麼多,來看看一些難以繞過的坎。其實相信不少同行在H5上運用video時,獲得的效果未必那麼近乎人意。
其中視頻類H5很大的一個坑是:在微信X5瀏覽器打開時,視頻會自動全屏播放,而且結束時會出現騰訊視頻的廣告。
目前在IOS下這兩個問題已經獲得瞭解決:即在<video>
標籤下添加屬性webkit-playsinline="true"
和playsinline
部分安卓機能夠經過這兩個屬性解決。但有些仍是不行。具體什麼機型,待測試…
這個問題是因爲微信團隊對視頻來源進行了域名限制,只有掛載在qq域名下的H5才能避免上述的問題。但目前白名單申請途徑已經關閉。在等待將來的更新能把這個問題解決的同時,針對安卓機,根據前輩經驗,有如下這兩種嘗試方法。
1) 使用canvas實時繪製
細節可參考 HTML5 視頻直播
本人嘗試過使用上文提到的jsmpg.js
解碼,可行性比較高。可是聲音就沒法由canvas播放了。
*注意jsmpg.hs
只支持解碼mpeg
格式的視頻。因此須要使用ffmpeg 對非mpeg
格式視頻進行轉換。
核心js
:
var canvas = document.getElementById('jsmpegCanvas'); var player = new jsmpeg('mov.mpg', {canvas:canvas, autoplay:true, loop: true});
其主要思路是利用js
將video
實時解碼,再利用canvas
渲染幀。因爲提到的兩個js轉換器沒有提供設置canvas
寬高的Api
,因此能夠嘗試經過scale
使canvas
全屏。
以前有嘗試過在同一個頁面裏讓video播放,visibility
設爲hidden
,直接利用requestAnimationFrame
對每一幀進行canvas
的drawImage
。然而在安卓下只要有播放的video
就仍然會自動全屏。
2) 目前在安卓有一種同層播放器的解決方案。可解決安卓機自動全屏以及視頻播放完畢會跳出廣告的問題,而且能夠實現交互。
經過video
屬性x5videoplayertype
聲明啓用同層H5播放器
<video src="http://xxx.mp4" x5-video-player-type="h5"/>
使用x5-video-player-fullscreen
本身從新適配新的視口大小 由於默認是進入全屏播放。
<video id="test_video" src="xxx" x5-video-player-type="h5" x5-vide o-player-fullscreen="true"/>
但發如今video+滑屏觸發時,發現存在很明顯的閃屏現象,而且不能自動播放。還有一個問題是video在播放時,背景音樂會失效。該方案仍有待測試,歡迎各位同行交流。
純CSS3的H5能夠參考VM團隊的那幾個。僅僅利用CSS3製做出很是炫酷的效果,必須對CSS3的運用很是純屬才行。
以前寫過一篇關於CSS3打造H53D方面的文章,你們能夠參考下。
3D無疑是CSS3在H5中的一種靈活運用方式。再提一下其餘的CSS3表現形式。
看一個案例——陌陌宣傳H5
截圖是某部分動畫的序列幀,雖然不是特別連貫,但體驗的效果並不差。
這裏的實現方式是經過JS
每隔必定時間切換class
改變背景圖的background-position
放上一個Demo你們體驗
除了經過JS
實時控制之外,還可使用CSS3
的animation
。
首先須要將每一幀拼接成雪碧圖,這裏的例子仍是使用上述圖片。
經過keyframes
設置每幀的background-position
須要把每一幀都寫入,較爲繁瑣
@-webkit-keyframes fresh { 0% { background-position:-600px -1467px; } 4.34% { background-position:-600px -978px; } ... 100% { background-position:-900px -489px; } }
在.bg
下添加animation
屬性
animation: fresh steps(1,end) 4s infinite; -webkit-animation: fresh steps(1,end) 4s infinite;
另外有一種比較簡單的方法,須要將每一幀按順序拼合好雪碧圖。如雪碧圖從左至右必須是連貫的幀。好比這種
代碼寫成以下形式即可
@-webkit-keyframes fresh { 0% { background-position: 0 0; } 100% { background-position:-900px 0; } } animation: fresh steps(4,end) 4s infinite; -webkit-animation: fresh steps(4,end) 4s infinite;
補間動畫用CSS3
表現起來就是最基本的transform
結合 transition
animation
造成位移、形變、旋轉等動畫。能夠將逐幀動畫之外的旋轉變換動畫當作是補間動畫。
想要作出能吸引用戶的補間動畫,能夠從如下四個方面入手。
1) 明確每個物件在每一時刻的動效
動畫屬性分解表 (via ISUX-H5動效的常見製做手法)
2)使用《動畫十二法則》
建議細讀 譯文-網頁動畫的十二原則,瞭解動畫製做的必要元素,怎麼使本身作出的動畫連貫天然。動效能夠異想天開,儘量誇張,但仍是得複合物體的物理運動規則。
十二法則在h5動效上用得比較多的有
擠壓、拉伸,預備動做,誇張,彰顯特性,跟隨,節奏等
看兩個小案例
關注最左邊紅色小罐
下落時先有個向右的傾斜動畫,再倒向左邊。這符合預備動做
而後抖動幾下才緩緩停下,符合緩出效果
若是紅色小罐下落到觸地有個拉伸擠壓的過程,會使動畫顯得比較Q彈
而最右邊的葡萄酒瓶,裏面的酒跟隨着酒瓶的運動。
天鵝上下漂浮,節奏起伏知足正餘弦函數,符合在水中緩緩浮沉的感受
漣漪慢慢擴散 人物的髮箍跟隨她上下起伏
圖片來自追波和站酷,侵刪。
3)關注轉場動畫
轉場動畫運用了《動畫十二法則》逐幀法則,目的是使場景轉換變得先後有必定的銜接性,可用於H5某一屏的切換還有某一些響應用戶行爲的動做。因此不少時候能夠將簡單的每屏推動推出,換成一種先後有關聯的形式進行場景切換。
這篇文章已經將思路理得很清晰,這裏就再也不細說了。
功能性動畫UX設計——打造優秀的過渡轉場效果
4)善用工具
10 個值得前端收藏的 CSS3 動效庫
還有一個比較經常使用的工具 貝塞爾曲線CSS生成
貝塞爾曲線可用於animation
或者transition
的time-funtion
上,可造成某些比較特殊的動畫效果。看一個運用實例 貝塞爾曲線製做彈性動畫
其實原理十分簡單
上圖的運動能夠用下面這個貝塞爾曲線表示,其中曲線的斜率可當作速度,這樣就好理解了。
今天先談到這裏,下篇文章會帶來H5 SVG的玩法。^^感謝您的閱讀。