当前位置: 首页 > news >正文

Web动画(lottie篇)

一、Lottie简介

Lottie是一个库,可以解析使用AE制作的动画(需要用bodymovin导出为json格式),支持web、ios、android和react native。在web侧,lottie-web库可以解析导出的动画json文件,并将其以svg或者canvas的方式将动画绘制到我们页面中

总的来说,

  • Lottie通过读取json文件信息实现动画效果。
  • json信息包括动画长度、宽度、动画资源、图层信息等,这些属性阐述了动画该做什么、该怎么做。

1.1 lottie的优点

Lottie方法方案是由设计师出动画,导出为json,给前端播放。所以,使用Lottie方案的好处在于:

  • 动画由设计使用专业的动画制作工具Adobe After Effects来实现,使动画实现更加方便,动画效果也更好;
  • 前端可以方便的调用动画,并对动画进行控制,减少前端动画工作量;
  • 设计制作动画,前端展现动画,专业人做专业事,分工合理;
  • 卖家秀即买家秀,还原程度百分之百;
  • 使用lottie方案,json文件大小会比gif文件小很多,性能也会更好。
  • 支持跨平台,开发成本较低,一套Lottie动画可以在Android/IOS/Web多端使用。
  • 性能好,端上除了解析json,基本没有其他耗性能的操作;并且相比于需要存储较多图片的帧动画,Lottie可以节省比较多的内存空间。

二、使用方法(附基本代码)

2.1 前期准备

  1. 下载安装** After Effects **

  1. 在AE上制作动画
  2. 安装插件Bodymovin,并使用插件导出,导出的是json格式的文件结构

image.png

  1. 使用【lottie-web】依赖读取该文件导出的json 格式的内容 便引入了该lottie动画

2.2 基本代码

<template><div class="lottie_page"><div id="lottie"></div></div>
</template>
<script>
import lottie from 'lottie-web';  // 引入lottie 库
import * as animationData from '@/assets/lottie/data.json'; // 引入素材文件
export default {data() {return {};},mounted() {this.lot = lottie.loadAnimation({container: document.getElementById('lottie'),renderer: 'svg',loop: false,autoplay: false,animationData: animationData.default});},
};
</script>

所以,在网页上制作动画就是这么简单,只需少量的代码便可以实现!!

三、效果

动画4.gif

四、参考

  1. 原生插件 用AE导出json | LottieFiles plugin | 原生插件
  2. bodymovie插件 https://pan.baidu.com/s/1vcM86DyoZjefwCN5_-GqIA?pwd=2301&at=1711347005762
  3. 使用 如何在vue中使用Lottie - 掘金

附加:进阶玩法

第一阶段

整体元素的简单的播放暂停设置播放进度

第二阶段

多个元素各自有自己的播放的规律

  1. AE中有一个总合成,不同元素之间有一个单独的合成
  2. 导出多个不同元素的json文件
  3. 在vue中为每个json文件定义一个标签,并挂载事件
  4. 单独控制元素的播放规律

第三阶段

多个元素有个自己动态的播放规律

由于 lottie是用过 json 来控制动画的,而前端与后端交互最常见的格式是什么?

JSON!!

因此,可以从后端获取数据之后,在前端重新拼接到json中,就可以实现动态的动画。

举个栗子🌰:

  1. 拼多多翻牌抽奖(动态设置金额,指定选中翻牌)

image.png

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Unity3D结合AI教育大模型 开发AI教师 AI外教 AI英语教师案例
  • 昇思25天学习打卡营第23天|LSTM+CRF序列标注
  • 图像生成中图像质量评估指标— LPIPS介绍
  • JCR一区级 | Matlab实现TTAO-Transformer-LSTM多变量回归预测
  • 分享几种电商平台商品数据的批量自动抓取方式
  • STM32CubeIDE(CAN)
  • Java设计模式—单例模式(Singleton Pattern)
  • W30-python03-pytest+selenium+allure访问百度网站实例
  • SpringBoot中如何使用RabbitMq
  • NVIDIA Drivers、CUDA、Pytorch安装
  • linux--mount--挂载
  • Spring踩坑:抽象类作为父类,使用子类@Autowired属性进行填充,属性值为null
  • 【CI/CD】docker + Nginx自动化构建部署
  • c++线程传参
  • KCache-go本地缓存,支持本地缓存过期、缓存过期自维护机制。
  • 230. Kth Smallest Element in a BST
  • Android单元测试 - 几个重要问题
  • CentOS 7 修改主机名
  • Redis 中的布隆过滤器
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 多线程 start 和 run 方法到底有什么区别?
  • 分享一份非常强势的Android面试题
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 猴子数据域名防封接口降低小说被封的风险
  • 前端技术周刊 2019-02-11 Serverless
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 数组的操作
  • 异步
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​水经微图Web1.5.0版即将上线
  • #pragma data_seg 共享数据区(转)
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (9)STL算法之逆转旋转
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (solr系列:一)使用tomcat部署solr服务
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (四)Android布局类型(线性布局LinearLayout)
  • (循环依赖问题)学习spring的第九天
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net 受管制代码
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET_WebForm_layui控件使用及与webform联合使用
  • .net解析传过来的xml_DOM4J解析XML文件
  • .NET框架设计—常被忽视的C#设计技巧
  • .NET中使用Protobuffer 实现序列化和反序列化
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • ??如何把JavaScript脚本中的参数传到java代码段中