记一次在Taro开发的微信小程序中使用lottie动画的经验

2023-05-16

前景提要

最近在做公司项目的时候,看到移动端开发用的小图标有动态效果,非常好玩了解到是使用lottie进行实现的,这个东西以前有看到过对应的插件库,但是一直没有时间做研究,趁着这个五一就抽一天时间,去图书馆借了一本讲AE的书,跟着网上的教程加入了一个lottie动画到小程序中去。在此分享一下,希望各位大佬有更好的处理方式可以一起沟通交流。

lottie相关库

相关库: 
[lottie-web](https://github.com/airbnb/lottie-web)
[lottie-miniprogram](https://github.com/wechat-miniprogram/lottie-miniprogram)
[犸良](https://design.alipay.com/emotion)

lottie-web是airbnb开发的用于在web,ios,android端使用lottie动画的开源库,在AE中进行设计后的动画通过安装在AE中的Bodymovin插件导出对应的json,就可以根据官方文档在使用此库的位置使用动画。

lottie-miniprogram官方小程序文档中提供的用于在小程序中使用的lottie库。

犸良。蚂蚁设计服务平台,如果不具备AE开发能力,没有相关的开发资源,可以通过此平台,快速创建使用一些简单通用的lottie动画。

小程序实现

<!-- 在小程序中通过canvas进行lottie元素的绘制 -->
<canvas id="c1" type="2d" style="display: inline-block; width: 300px; height: 300px;"></canvas>
// lottie-miniprogram插件中提供的小程序代码实现片段
wx.createSelectorQuery().selectAll('#c1').node(res => {
  const canvas = res[0].node
  const context = canvas.getContext('2d')

  canvas.width = 300
  canvas.height = 300

  lottie.setup(canvas)
  this.ani = lottie.loadAnimation({
    loop: true,
    autoplay: true,
    animationData: require('../json/catrim.js'),
    rendererSettings: {
      context,
    },
  })
  this._inited = true; // 用于控制当前 
}).exec()

Taro实现

注意事项:

  1. 因为小程序中不支持预加载lottie图像(didShow的时候不能动态让canvas加载lottie动画,需要进行对应的事件操作之后再进行加载,所以这里使用一个Icon进行遮罩),预加载之前显示这个Icon,动画加载完成之后开始执行的时候取消,这个Icon最好能取到动画的首帧图,或者是处于lottie动画某个关键帧的图片,根据场景来确定。
  2. Taro中不需要通过单独在内部设置canvas的width和height,来设置lottie动画的dpr,Taro中的Canvas组件会自动进行适配。
<View>
	<AtIcon value="heart-2" size="20" color="#ccc" />
	<Canvas id=“canvas” type="2d" />
</View>
Taro.createSelectorQuery().select('#canvas').node((res: any) => {
  const canvas = res.node;
  const context = canvas.getContext('2d');
  lottie.setup(canvas);
  likeBtn = lottie.loadAnimation({
    rendererSettings: {
      context
    },
    loop: false,
    autoplay: false,
    animationData: require('./like.json')
  });
}).exec()

遇到的问题

  1. lottie动画在微信小程序中不能初始就渲染,目前只能采用另一个元素来提前占位的方式。
  2. 在Taro构建的小程序中,比如点赞功能,可能存在多次点击频繁切换lottie动画的播放和停止的状态,可能导致动画显示的状态不一致,这里目前我使用防抖函数来进行处理,在单位时间之内不能频繁点击切换来进行处理。

更新2021-5-13

解决问题1. 初始不能直接进行渲染,可以设置一个定时器,等待页面渲染完成之后,可以正常进行元素的渲染。

如果有同行有更好的处理方式,希望能一起分享,虚心求教。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

记一次在Taro开发的微信小程序中使用lottie动画的经验 的相关文章

  • CentOS7安装MariaDB以及编码注意事项

    1 安装并启动MariaDB span class hljs preprocessor 先更新一下 span yum upgrade span class hljs preprocessor 安装 span yum y install ma
  • c++多线程 (生产者消费者问题)

    针对多线程中常见的生产者消费者问题 xff0c 封装了一个类 xff0c 和测试代码 xff0c 方便日后直接套用 具体来说就是多线程使用时候经常遇到的 一个线程取数据 xff0c 一个处理数据 xff0c 一个保存或传递数据 的情况 简单
  • 看技术书籍坚持不下来的,看这里,记录增量学习法

    今天 xff0c 在阅读 软技能 代码之外的生存指南 这本书的过程中 xff0c 学习到了番茄工作法 定额工作法 xff0c 受此启发 xff0c 突然脑海里冒出了一个方法论 xff0c 这是我独创的一个学习方法论 xff0c 我把它称作
  • Android native内存泄露排查总结

    Android开发通常涉及java层 native xff08 c c 43 43 xff09 下的开发 xff1b 内存的泄露也可以分为dalvik和native两种 xff1b java层的通常叫好分析 xff0c 可以借助heapdu
  • 分享一个手游脚本源码

    目的 给大家接触手游模拟脚本的一个样板 xff0c 支持多分辨率适配 脚本功能为批量送体力给好友 xff0c 功能简单 源码 lua span class token comment 版本 span span class token com
  • crackme例子2

    样本 jadx clacSnFuntion jni函数 xff0c ida分析 关键位置函数一片红色 xff0c 可能有动态加解密 如果不分析具体解密算法 xff0c 可内存dump解密后整个so frida如下 xff1a span cl
  • 8本游戏开发书籍推荐

    很多刚刚接触游戏开发的朋友经常问我 xff1a 如何开始学习游戏开发 xff1f 我从事游戏开发行业很多年了 xff0c 坦率地讲 xff0c 开发游戏充满挑战性 xff0c 需要开发人员具备大量的技能与积极的创新精神 希望这篇小文能帮助朋
  • win10编译scrcpy详解

    环境配置 安装MSYS2 安装后打开msys终端 xff0c 运行如下命令 span class token comment runtime dependencies span pacman S mingw w64 x86 64 SDL2
  • windows编译安卓源码记录

    环境 Windows10 43 vmware17 43 ubuntu22 ubuntu环境设置 装完ubuntu系统后拖拽复制文件进去验证vmtools功能情况 xff0c 如果vmtools异常很麻烦 xff0c 试了n多方法 xff0c
  • adb执行多条连续cmd命令

    你可以试一下下面的方法 xff1a 64 echo off echo su gt temp txt echo 其它命令 gt gt temp txt adb shell lt temp txt del temp txt 普通情况 xff0c
  • java代码混淆

    什么是代码混淆 Java 是一种跨平台的 解释型语言 xff0c Java 源代码编译成中间 字节码 存储于 class 文件中 由于跨平台的需要 xff0c Java 字节码中包括了很多源代码信息 xff0c 如变量名 方法名 xff0c
  • nm命令 查看符号文件

    nm命令介绍的很多 xff0c 但大多不介绍其函数符号标志的含义 最近在调试动态库时常用到 xff0c 其中用的最多的用法 nm A grep aaa c 43 43 filt A 为了显示文件 xff0c c 43 43 filt转换为可
  • 把1-9这9个数字按从小到大的顺序排列 ,中间添上“+”和“-“,““,可以计算的结果等于100的程序

    Talk is cheap show me the code 穷举法 计算次数 3 8 61 6561 输出等于100的结果 arr 61 1 2 3 4 5 6 7 8 9 flag 61 34 43 34 34 34 34 34 fun
  • 安卓某Q协议分析

    直接进入主题 主要数据包 renamed from oicq wlogin sdk request l 抓包数据分析 oicq wlogin sdk request request TGTGT 这个类 tlv18 包数据 001800160
  • pyinstaller打包

    virtualenv pip span class token function install span virtualenv pipenv xff08 官方推荐 xff09 pip span class token function i
  • sudo apt-get update 报错:E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/te

    Ubuntu 更换源后 xff0c 使用命令更新源 xff0c 出现报错 xff0c 解决办法 今天在装完ubuntu系统后 xff0c 更换了阿里源 xff0c 使用sudo apt get update命令更新源 出现如下错误 xff1
  • 基于线程池的生产者消费者模型(含阻塞队列)

    一 线程池 二 模型实现 1 准备工作 2 创建线程 3 PushTask函数 4 PopTask函数 5 线程执行函数Routines 三 模型测试 一 线程池 和内存池一样 xff0c 线程池也是为了提升效率 一个服务器可能短时间会接收
  • 意图识别资料纪录

    今天搞意图识别貌似这个资料的介绍很不错 不知道怎么转载 xff0c 放到这https blog csdn net zengNLP article details 94657099
  • 在C#中 麦克风录音数据float [] 转byte [] 的方法

    public static byte AudioFloat2Byte float floatData float samples 61 floatData audio clip GetData samples 0 short intData
  • redis 是个啥后续--Redis 数据缓存和消息队列

    用python写了一个Redis 的数据缓存和消息队列的例子 xff0c 代码没有在这里传 xff0c 有想看的去Github 上吧 xff0c 有什么问题别赖我 xff0c 在这个领域我知道的也就这么多了 xff0c 后续还有更深的研究的

随机推荐