uniapp中利用lottie实现JSON动画

打印 上一主题 下一主题

主题 1771|帖子 1771|积分 5313

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
不喜欢废话直接开干

一、引入相干依赖

  1. npm install lottie-web
  2. # 如果有问题可以和我保持一致:npm install lottie-web@5.12.2
复制代码
二、在项目的目录新建目录结构



  • 存放资源的目录,用于存放JSON动画:/static/svgJson/*
  • 用于存放动画组件的目录:/components/SvgAnimation/*
三、操作步调

在一些素材网站上下载我们需要的JSON素材,或者直接找UI给你
比如我们熟知的iconfon
下载后我们会得到一个.json的文件,我们把它放在资源目录下,比如:/static/svgJson/start.json
在存放动画组件中新增一个自界说组件,就比如:/components/SvgAnimation/start.vue
四、编写自界说组件代码

模板代码如下:
  1. <template>
  2.   <view class="container-start">
  3.     <view id="start"></view>
  4.   </view>
  5. </template>
  6. <script module="renderScript" lang="renderjs">
  7. import lottie from 'lottie-web'
  8. import start from "../../static/svgJson/start.json";
  9. export default {
  10.     mounted() {
  11.         this.ready()
  12.     },
  13.     methods: {
  14.         ready() {
  15.             lottie.loadAnimation({
  16.                 container: document.getElementById("start"),
  17.                 renderer: 'svg',
  18.                 loop: true,
  19.                 autoplay: true,
  20.                 animationData: start
  21.             });
  22.         }
  23.     }
  24. };
  25. </script>
  26. <style>
  27. /* 这里可以自己定义相关的样式,这里只是做个示范,具体按照界面而定 */
  28. .container-start {
  29.   width: 50%;
  30. }
  31. #start {
  32.   width: 100%;
  33. }
  34. </style>
复制代码
  须知:代码中的start可以替换成自己生存的JSON文件
  打个比方就是:我下载了一个名字叫end.json文件,我就在/components/SvgAnimation目录下新增一个end.vue
  然后利用快捷键ctrl+h,然后将模板中的start单词全部替换成end即可
  五、组件的利用

在页面中引入组件直接利用即可:
  1. import More from "../../components/SvgAnimation/more.vue"
  2. # 在界面中使用:
  3. <More></More>
复制代码
提一嘴

由于比力懒,而且项目中利用的也不是太多,以是并没有进行封装。
一方面由于利用了renderjs,封装起来也不是一件短时间就能完成的事情,涉及到uniapp的视图层和逻辑层的数据交互,更多的是没有机会去深入研究。
另一方面也就是拿着模板代码直接替换一个名称也就是一会的事情。
如果有大佬有封装的代码那更好不外了!
更多

lottie-web常用方法

   animation.play(); // 播放该动画,从现在制止的帧开始播放
  animation.stop(); // 制止播放该动画,回到第0帧
  animation.pause(); // 暂停该动画,在当前帧制止并保持
  animation.goToAndStop(value, isFrame); // 跳到某个时候/帧并制止。isFrame(默认false)指示value表示帧还是时间(毫秒)
  animation.goToAndPlay(value, isFrame); // 跳到某个时候/帧并进行播放
  animation.goToAndStop(30, true); // 跳转到第30帧并制止
  animation.goToAndPlay(300); // 跳转到第300毫秒并播放
  animation.playSegments(arr, forceFlag); // arr可以包罗两个数字或者两个数字组成的数组,forceFlag表示是否立刻逼迫播放该片断
  animation.playSegments([10,20], false); // 播放完之前的片断,播放10-20帧
  animation.playSegments([[0,5],[10,18]], true); // 直接播放0-5帧和10-18帧
  animation.setSpeed(speed); // 设置播放速率,speed为1表示正常速率
  animation.setDirection(direction); // 设置播放方向,1表示正向播放,-1表示反向播放
  animation.destroy(); // 删除该动画,移除相应的元素标签等。在unmount的时候,需要调用该方法
  添加点击事件

  1. <template>
  2.   <view class="container">
  3.     <view id="home"></view>
  4.   </view>
  5. </template>
  6. <script module="renderScript" lang="renderjs">
  7. import lottie from 'lottie-web'
  8. import home from "../../static/svgJson/home.json";
  9. export default {
  10.     data(){
  11.         return {
  12.             animation: null
  13.         }
  14.     },
  15.     mounted() {
  16.         this.ready()
  17.         this.addClickEvent()
  18.     },
  19.     methods: {
  20.         ready() {
  21.             this.animation = lottie.loadAnimation({
  22.                 container: document.getElementById("home"),
  23.                 renderer: 'svg',
  24.                 loop: false, //是否循环播放
  25.                 autoplay: true, //是否自动播放
  26.                 animationData: home // 加载json的文件名
  27.             }); // 加载
  28.             this.animation.goToAndStop(55,true)
  29.         },
  30.         addClickEvent(){
  31.             document.getElementById("home").addEventListener("click",()=>{
  32.                 this.animation.playSegments([10,65],true)
  33.             })
  34.         }
  35.     },
  36.     beforeDestroy() {
  37.         document.getElementById("home").removeEventListener("click",()=>{})
  38.     }
  39. };
  40. </script>
复制代码
界面中给组件添加点击事件:
  1. <Home @click.native="clickSvg"></Home>
复制代码

结尾:更多的操作由各位去发掘吧

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

温锦文欧普厨电及净水器总代理

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表