vue中使用Lottie

Lottie簡介

官方介紹:Lottie是一個庫,可以解析使用AE制作的動畫(需要用bodymovie導(dǎo)出為json格式),支持web棉胀、ios挤巡、android、flutter和react native笆搓。 在web端性湿,lottie-web庫可以解析導(dǎo)出的動畫json文件,并將其以svg或者canvas的方式將動畫繪制在我們的頁面上.

Lottie的優(yōu)點

1.動畫由設(shè)計使用專業(yè)的動畫制作工具AE來實現(xiàn)满败,使動畫實現(xiàn)更加方便肤频,且效果更好
2.前端可以方便的調(diào)用動畫,并對動畫進行控制算墨,減少前端動畫工作量
3.設(shè)計制作動畫宵荒,前端展現(xiàn)動畫,分工明確
4.使用lottie方案,json文件大小比gif文件小很多报咳,性能也會更好

lottie-web 在前端的使用

1.安裝lottie-web

npm install lottie-web

2.lottie-web的基本用法

const animation = lottie.loadAnimation({
  container: document.getElementById('domId'), // 綁定dom節(jié)點
  renderer: 'svg', // 渲染方式:svg侠讯、canvas
  loop: true, // 是否循環(huán)播放,默認(rèn):false
  autoplay: true, // 是否自動播放, 默認(rèn)true
  animationData: // AE動畫使用bodymovie導(dǎo)出為json數(shù)據(jù)
})

lottie-web 常用方法

animation.play(); // 播放暑刃,從當(dāng)前幀開始播放

animation.stop(); // 停止厢漩,并回到第0幀

animation.pause(); // 暫停,并保持當(dāng)前幀

animation.goToAndStop(value, isFrame); // 跳到某個時刻/幀并停止isFrame(默認(rèn)false)指示value表示幀還是時間(毫秒)

animation.goToAndPlay(value, isFrame); // 跳到某個時刻/幀并進行播放

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)簽等谷扣。

Lottie-web 常用的事件

animation.addEventListener('data_ready', () => {}) // 動畫數(shù)據(jù)加載完畢
animation.addEventListener('config_ready', () => {}) // 完成初始配置后
animation.addEventListener('data_failed', () => {}) // 加載動畫數(shù)據(jù)失敗
animation.addEventListener('loaded_images', () => {}) // 所有圖片加載成功或者失敗
animation.addEventListener('DOMLoaded', () => {}) // 將元素添加到DOM后

Lottie的免費資源

https://lottiefiles.com/

image.png

找到我們想要的動畫土全,然后點擊后,彈出窗口会涎,點擊下載裹匙,格式為JSON。然后就能把這個動畫的json數(shù)據(jù)用到我們自己的項目里邊去了

在vue中使用lottie

1.安裝lottie-web

npm install lottie-web

2.封裝一個基礎(chǔ)的組件lottie.vue

<template>
  <div>
    <div ref="bodyAnimation" :style="style"></div>
  </div>
</template>
   
<script>
import lottie from "lottie-web";
export default {
  name: "",
  props: {
    options: {
      type: Object,
      required: true,
    },
    width: {
      type: Number,
      default: 200,
    },
    height: {
      type: Number,
      default: 200,
    },
  },
  data() {
    return {
      style: {
        width: this.width ? `${this.width}px` : "100%",
        height: this.height ? `${this.height}px` : "100%",
        overflow: "hidden",
        margin: "0 auto",
      },
    };
  },
  mounted() {
    this.anim = lottie.loadAnimation({
      container: this.$refs.bodyAnimation, // the dom element that will contain the animation
      renderer: "svg",
      loop: this.options.loop !== false,
      autoplay: this.options.autoplay !== false,
      animationData: this.options.animationData,
      rendererSettings: this.options.rendererSettings,
      //   path: sheepJson // the path to the animation json
    });
    this.$emit("animCreated", this.anim);
  },
  methods: {},
};
</script>
   
   <style lang="scss" scoped>
</style>

3.使用組件

<template>
  <div @click="next()">
    <lottie
      :options="heartOptions"
      :height="200"
      :width="200"
      v-on:animCreated="heartAnimation"
    />
  </div>
</template>
  
  <script>
import lottie from "../../components/Lottie/index";
import heartdata from "../../assets/json/heart.json";
export default {
  name: "",
  components: {
    lottie,
  },
  data() {
    return {
      heartOptions: {
        animationData: heartdata,
        loop: false,
        autoplay: false,
      },
      heartanim: null,
      Direction: -1,
    };
  },
  mounted() {},
  methods: {
    heartAnimation: function (anim) {
      this.heartanim = anim;
      if (this.Direction == -1) {
        this.heartanim.goToAndStop(64, true);
      }
    },
    next() {
      
      if (this.Direction > 0) {
        this.Direction = -1;
        this.heartanim.setDirection(this.Direction);
        this.heartanim.play();
        console.log(1);
      } else {
        this.Direction = 1;
        this.heartanim.setDirection(this.Direction);
        this.heartanim.play();
        console.log(2);
      }
    },
  },
};
</script>
  
<style lang="scss" scoped>
</style>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末在塔,一起剝皮案震驚了整個濱河市幻件,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蛔溃,老刑警劉巖绰沥,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贺待,居然都是意外死亡徽曲,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門麸塞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秃臣,“玉大人,你說我怎么就攤上這事哪工“麓耍” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵雁比,是天一觀的道長稚虎。 經(jīng)常有香客問我,道長偎捎,這世上最難降的妖魔是什么蠢终? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任序攘,我火速辦了婚禮,結(jié)果婚禮上寻拂,老公的妹妹穿的比我還像新娘程奠。我一直安慰自己,他們只是感情好祭钉,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布瞄沙。 她就那樣靜靜地躺著,像睡著了一般慌核。 火紅的嫁衣襯著肌膚如雪帕识。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天遂铡,我揣著相機與錄音,去河邊找鬼晶姊。 笑死扒接,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的们衙。 我是一名探鬼主播钾怔,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼捂人!你這毒婦竟也來了喊儡?” 一聲冷哼從身側(cè)響起士骤,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎矾利,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體馋袜,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡男旗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了欣鳖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片察皇。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖泽台,靈堂內(nèi)的尸體忽然破棺而出什荣,到底是詐尸還是另有隱情,我是刑警寧澤怀酷,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布稻爬,位于F島的核電站,受9級特大地震影響胰坟,放射性物質(zhì)發(fā)生泄漏因篇。R本人自食惡果不足惜泞辐,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望竞滓。 院中可真熱鬧咐吼,春花似錦、人聲如沸商佑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茶没。三九已至肌幽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抓半,已是汗流浹背喂急。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留笛求,地道東北人廊移。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像探入,于是被迫代替她去往敵國和親狡孔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容