Lottie一個適用于Web、Android、iOS、React Native和Window的移動庫,它可以使用Bodymovin解析以json格式導(dǎo)出的Adobe After Effects動畫,并再移動設(shè)備上進(jìn)行本地渲染。
1.需要引入JavaScript文件,我使用的是cdn中的鏈接。這里直接上鏈接,按需取用。點這里
2.json格式的文件
我不是UI啊,我也不知道怎么做出來的,我只知道使用AE做的動畫再通過bodymovin導(dǎo)出的。到我手里就是兩個文件:一個.html文件和一個.json文件。
html后綴的文件可以直接使用,但是對于項目來說會存在冗余,所以我是用的json后綴文件。
3.引入json文件
在HTML里引入json文件我是這樣做的:
1.需要給json文件聲明變量接收
拿到的json文件:{" ":" "," ":" "}
處理后json文件:var one={" ":" "," ":" "}
(文件太長了,復(fù)制過來占地方,就這樣看吧,也不影響[狗頭])
備注:這里直接修改json文件會使文件出現(xiàn)小紅叉,雖然不影響靜態(tài)頁面的顯示,但為了更專業(yè),這里可以把文件修改為js文件。
方法:將json文件修改為js文件,處理文件部分改為:window.one={" ":" "," ":" "}
,正常引入js文件即可,除了文件格式不一樣,其他都是一樣的,不需要做修改。
2.在文件中使用<script></script>
標(biāo)簽引入js文件或者json文件
4.使用lottie
接下來就是本篇文的主角–lottie
<body>
<div id="lottie"></div>
<!--引入lottie的js文件地址-->
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/bodymovin/5.9.1/lottie.min.js"></script>
<!--引入的js格式文件-->
<script type="text/javascript" src="js/json/animation.js"></script>
<script type="text/javascript">
//使用lottie
const anim = lottie.loadAnimation({
container: document.getElementById('lottie'),
renderer: 'svg',//渲染方式:svg:支持交互、不會失幀;canvas、html:支持3D,支持交互
loop: false,//循環(huán)播放:默認(rèn)為true
autoplay: false,//自動播放:默認(rèn)為true
//assetsPath:'images/',//圖片文件夾的路徑(這里可以設(shè)置圖片地址,如果設(shè)置了最終是在這個路徑下找圖片)
animationData: one //變量名(還記得上面聲明變量接收的json文件或者js文件吧,跟那個接收的名字要一樣)
})
//然后就是把這段代碼放在你想要運行的時候,比如想要在加載之后就執(zhí)行,那就放在以下代碼里
window.onload=function(){anim.play()}
</script>
</body>
5.常用方法
anim.play()
:播放,從當(dāng)前幀開始播放anim.stop()
:停止,并回到第0幀anim.pause()
:暫停,并保持當(dāng)前幀anim.goToAndStop(value,isFrame)
:跳到某個時刻/幀并停止anim.goToAndPaly(value,isFrame)
:跳到某個時刻/幀并播放
//isFrame:指明value的單位是毫秒(false 默認(rèn)的)還是幀(true),可以省略。
animation.goToAndStop(30, true) // 跳轉(zhuǎn)到第30幀并停止
animation.goToAndPlay(300) // 跳轉(zhuǎn)到第300毫秒并播放
anim.playSegments(arr,forceFlag)
:以幀為單位,播放指定片段
//arr:可以包含兩個數(shù)字或者兩個數(shù)字組成的數(shù)組
//forceFlag:表示是否立即強(qiáng)制播放該片段
animation.playSegments([10,20], false) // 播放完之前的片段,播放10-20幀
animation.playSegments([[0,5],[10,18]], true) // 直接播放0-5幀和10-18幀
anim.setSpeed(speed)
:設(shè)置播放速度,speed為1表示正常速度anim.setDirection(direction)
:設(shè)置播放方向,1表示正向播放,-1表示反向播放anim.destroy()
:刪除該動畫,移除相應(yīng)的元素標(biāo)簽等
6.常用事件
//監(jiān)聽方法 給需要的動畫添加監(jiān)聽
//加載完動畫json文件時的data_ready事件
anim.addEventListener('data_ready', () => { console.log('animation data has loaded'); })
//播放完成(循環(huán)播放下不會觸發(fā))
anim.addEventListener('complete', () => {});
//當(dāng)前循環(huán)下播放(循環(huán)播放/非循環(huán)播放)結(jié)束時觸發(fā)
anim.addEventListener('loopComplete', () => {});
//每進(jìn)入一幀就會觸發(fā),播放時每一幀都會觸發(fā)一次,stop方法也會觸發(fā)
anim.addEventListener('enterFrame', () => {});
//播放指定片段時觸發(fā),playSegments、resetSegments等方法剛開始播放指定片段時會觸發(fā),如果playSegments播放多個片段,多個片段最開始都會觸發(fā)
anim.addEventListener('segmentStart', () => {});
//將在動畫刪除時觸發(fā)
anim.addEventListener('destroy', () => {});
7.部分高階用法(來源網(wǎng)絡(luò))
在制作AE動畫時,將圖層命名為#svgId格式,前端加載該動畫后,相應(yīng)的圖層的id會被設(shè)置為svgId,可以通過dom?法獲取該元素并做相應(yīng)的操作;
在制作AE動畫時,將圖層命名為.svgClass格式,前端加載該動畫后,相應(yīng)的圖層的class會被設(shè)置為svgClass,可以通過dom?法獲取這些元素并做相應(yīng)的操作;文章來源:http://www.zghlxwxcb.cn/news/detail-408498.html
8.補(bǔ)充對json文件的解析
注:來源于網(wǎng)絡(luò)的圖片,見水印
動畫總的運行時間=(結(jié)束關(guān)鍵幀-起始關(guān)鍵幀)/幀率文章來源地址http://www.zghlxwxcb.cn/news/detail-408498.html
到了這里,關(guān)于Lottie--前端動畫效果--UI輸出json格式--lottie動畫在JavaScript中使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!