前端實現(xiàn)json動畫詳細(xì)過程(附帶示例)
使用lottie制作動畫。
1.json動畫
廢話 不多說,直接看效果圖
2.實現(xiàn)效果
3.git倉庫
https://gitee.com/chaiachai/lottie
4.運行
npm install npm run serve
5.json動畫天堂
https://lottiefiles.com/可以下載想要的json動畫
顯示json的幀數(shù)詳情
6.代碼
<template> <div class="home"> <div class="wrap" ref="lavContainer" @click="changeAnimal"></div> <button v-on:click="change('wink')">wink</button> <button v-on:click="change('cry')">哭泣</button> <button v-on:click="change('laugh')">大笑</button> <button v-on:click="change('rolleyes')">轉(zhuǎn)眼睛</button> </div> </template> <script> import lottie from 'lottie-web' import * as animationData from '@/assets/lottie/AnimationLong.json' import * as animationData1 from '@/assets/lottie/AnimationDate.json'//json 引入的json可能也會有問題,json文件下載的過程中丟失了? export default { name: 'app', components: { }, data() { return { anim: null, changeFlag: false } }, mounted() { this.anim = lottie.loadAnimation({ container: this.$refs.lavContainer, renderer: 'svg', loop: false,//是否循環(huán) autoplay: true,//自動播放 倘若只需要一打開頁面就直接播放動畫,可以設(shè)置為true。如果動畫播放完,需要執(zhí)行其他的操作,可以設(shè)置動畫播放多少秒結(jié)束(和制作動畫的人配合,他會告訴你動畫多長時間,或者在lottie網(wǎng)站下的動畫,進(jìn)到編輯頁面可以查看到動畫的幀數(shù)時長),直接進(jìn)行其他的邏輯。 animationData: animationData,//這里有的可能會報錯,可以使用require的方式 } ) this.anim.addEventListener('complete', () => { console.log('animation data has loaded') })//監(jiān)聽動畫播放完,進(jìn)行操作 }, methods: { changeAnimal() { this.anim.destroy() this.anim = lottie.loadAnimation({ container: this.$refs.lavContainer, renderer: 'svg', loop: this.changeFlag ? false : true, autoplay: this.changeFlag ? false : true, animationData: this.changeFlag ? animationData : animationData1, } ) this.changeFlag = !this.changeFlag }, change(type) { switch (type) { case 'rolleyes': this.anim.playSegments([[0, 23], [99, 105]], true)//播放片段 因為沒有ui制作的json,所以直接自己假裝構(gòu)建一個比較自然的動畫 break case 'cry': this.anim.playSegments([[28, 48], [99, 105]], true) break case 'laugh': this.anim.playSegments([[50, 79], [99, 105]], true) break case 'wink': this.anim.playSegments([80, 100], true) break } } } } </script> <style> .home{ } .wrap{ width: 200px; height: 200px; overflow: hidden; margin: 0 auto; } </style>
7. 經(jīng)常使用的方法
lottie-web提供了很多的控制動畫播放的方法,下面是一些常用的方法。
animation.play(); // 播放該動畫,從目前停止的幀開始播放 animation.stop(); // 停止播放該動畫,回到第0幀 animation.pause(); // 暫停該動畫,在當(dāng)前幀停止并保持 animation.goToAndStop(value, isFrame); // 跳到某個時刻/幀并停止。isFrame(默認(rèn)false)指示value表示幀還是時間(毫秒) animation.goToAndPlay(value, isFrame); // 跳到某個時刻/幀并進(jìn)行播放 animation.goToAndStop(30, true); // 跳轉(zhuǎn)到第30幀并停止 animation.goToAndPlay(300); // 跳轉(zhuǎn)到第300毫秒并播放 animation.playSegments(arr, forceFlag); // arr可以包含兩個數(shù)字或者兩個數(shù)字組成的數(shù)組,forceFlag表示是否立即強制播放該片段 animation.playSegments([10,20], false); // 播放完之前的片段,播放10-20幀 animation.playSegments([[0,5],[10,18]], true); // 直接播放0-5幀和10-18幀 animation.setSpeed(speed); // 設(shè)置播放速度,speed為1表示正常速度 animation.setDirection(direction); // 設(shè)置播放方向,1表示正向播放,-1表示反向播放 animation.destroy(); // 刪除該動畫,移除相應(yīng)的元素標(biāo)簽等。在unmount的時候,需要調(diào)用該方法 //監(jiān)聽 //eg this.anim.addEventListener('complete', () => { console.log('animation data has loaded') })//監(jiān)聽動畫播放完,進(jìn)行操作 complete: 播放完成(循環(huán)播放下不會觸發(fā)) loopComplete: 當(dāng)前循環(huán)下播放(循環(huán)播放/非循環(huán)播放)結(jié)束時觸發(fā) enterFrame: 每進(jìn)入一幀就會觸發(fā),播放時每一幀都會觸發(fā)一次,stop方法也會觸發(fā) segmentStart: 播放指定片段時觸發(fā),playSegments、resetSegments等方法剛開始播放指定片段時會發(fā)出,如果playSegments播放多個片段,多個片段最開始都會觸發(fā)。 data_ready: 動畫json文件加載完畢觸發(fā) * DOMLoaded: 動畫相關(guān)的dom已經(jīng)被添加到html后觸發(fā) destroy: 將在動畫刪除時觸發(fā)
總結(jié)
到此這篇關(guān)于前端實現(xiàn)json動畫的文章就介紹到這了,更多相關(guān)前端實現(xiàn)json動畫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ESLint詳解及在WebStorm中的應(yīng)用步驟
ESLint是一種JavaScript代碼檢查工具,開發(fā)者可以通過自定義規(guī)則進(jìn)行代碼風(fēng)格和質(zhì)量的控制,使用ESLint的過程包括安裝、初始化配置、配置規(guī)則、運行ESLint檢查代碼、與編輯器集成,以及與構(gòu)建工具集成等,需要的朋友可以參考下2024-09-09JS獲取經(jīng)緯度并根據(jù)經(jīng)緯度得到城市信息簡單示例
前端時間剛好使用了百度地圖的js api定位獲取用戶當(dāng)前經(jīng)緯度并獲取當(dāng)前詳細(xì)位置的功能,為了方便下次找起來方便一些自己在這里記錄一下,這篇文章主要給大家介紹了關(guān)于JS獲取經(jīng)緯度并根據(jù)經(jīng)緯度得到城市信息的相關(guān)資料,需要的朋友可以參考下2023-11-11js實現(xiàn)iGoogleDivDrag模塊拖動層拖動特效的方法
這篇文章主要介紹了js實現(xiàn)iGoogleDivDrag模塊拖動層拖動特效的方法,實例分析了javascript操作拖動層的技巧,需要的朋友可以參考下2015-03-03JavaScript中實現(xiàn)鍵值對應(yīng)的字典與哈希表結(jié)構(gòu)的示例
字典或者哈希表這樣的鍵值對應(yīng)結(jié)構(gòu)在其他很多語言中都有內(nèi)置,非常好用,這里我們來看一下JavaScript中實現(xiàn)鍵值對應(yīng)的字典與哈希表結(jié)構(gòu)的示例:2016-06-06瀏覽器環(huán)境下JavaScript腳本加載與執(zhí)行探析之defer與async特性
defer和async特性相信是很多JavaScript開發(fā)者"熟悉而又不熟悉"的兩個特性,從字面上來看,二者的功能很好理解,分別是"延遲腳本"和"異步腳本"的作用2016-01-01轉(zhuǎn)換json格式的日期為Javascript對象的函數(shù)
項目中碰到了用jQuery從后臺獲取的json格式的日期的字符串,需要將此字符串轉(zhuǎn)換成JavaScript的日期對象,記在此處,以備后用。2010-07-07