一文带你快速实现高精度动画

简介: 由于各个动画实现方案有着各种问题,所以十分需要有一种简单、高效、体积小、还原度高的动画解决方案。在一次偶然的情况下,朋友推荐了 Lottie 库。

640 (8).gif

原文作者:UC 国际研发 衍豪

写在最前:欢迎你来到“UC国际技术”公众号,我们将为大家提供与客户端、服务端、算法、测试、数据、前端等相关的高质量技术文章,不限于原创与翻译。

背景

目前的动画形式多种多样,如 canvas、css、svg、gif、视频都是我们常见的形式,我们简单对它们做个分析:

  • 手写实现 svg 和 canvas 动画,控制粒度较细,工作量大,对着效果来实现容易有买家秀和卖家秀的区别,且客户端不能复用
  • css 我们经常使用来实现过渡效果、加载的动画,对于一些复杂的动画仍无法满足需求
  • gif 动画,文件较大,带透明通道的容易有毛边,且只能在一个固定的尺寸里渲染,颜色数最高 256 导致画质不高,
  • png 图序列,不能放大,且文件较大
  • 视频,文件体积十分大,影响加载时间

由于各个动画实现方案有着各种问题,所以十分需要有一种简单、高效、体积小、还原度高的动画解决方案。在一次偶然的情况下,朋友推荐了 Lottie 库。

Lottie 简介

众所周知,使用代码实现一套复杂的动画是一件困难且工作量大的事情,特别是在不同的平台,不同的分辨率下,难度又会提升一个级别。
现在,Airbnb 开源了一个叫 Lottie 的跨平台动画库(前身是 bodymovin,在版本号为 v5.0.0 的时候进行了更名。),能分析 Adobe After Effects 导出的动画,并完美展现动画效果。它最大的优点是提供了一套完整的跨平台的动画实现方案,如下图:

image.png

Lottie原理

在 AE 中,动画是由各个图层组成的,图层中的内容也可以拆分为多个元素。拆分元素之后,根据动画需求,可以单独对图层或者图层中的元素做平移、旋转、收缩等操作。
简单来说就是 Lottie 是通过 bodymovin 这个插件来将 AE 的工程文件的图层元素转化为对应的 JSON 文件数据,Lottie 则负责解析这些动画的数据,将其绘制在网页上。

Lottie 的优点

对于 GIF、手写动画实现、帧动画来说,这个方案:

极大地提高了动画的开发效率以及减少工作量(仅需要设计师完成动画效果的设计,导出 JSON,前端展示,无需关心实现的细节)

动画还原度高

线上更新也容易(只需要替换 JSON 文件和素材)

JSON 文件比 gif 文件小,性能也更好。

跨平台

Lottie 的不足

Lottie 的动画,只能是 svg/canvas 动画

JSON 文件的大小受限于设计师对 AE 的使用,如果图层很多,文件体积也会增大

有部分 AE 动画的属性,Lottie 暂未支持(常用的 3D 图层变换、几乎所有效果器 [effects]、图层样式 [layer styles]、叠加模式 [blending mode]、渐变 [gradient ramp/gradient fill...](好像正在加入支持,期待更新)、任意表达式 [expressions]、径向擦除 [radius wipe])

Lottie 库自身的大小不算小。如果项目对于动画使用不高,GI F可能是更优的选择

由于 Lottie 在 CDN 外链上的版本是 bodymovin 这个库,所以这里选择比较 bodymovin 的大小,npm 版本是 lottie-web。

image.png

同一动画对比

效果:

640 (9).gif

image.png

Lottie 的使用

npm 版本

image.png

cdn版本

在 html 文件的 head 引入:

image.png

执行

image.png

可使用的场景

1.业务引导动画,不需要每次在清晰度和文件大小平衡,使用 Lottie 可提高动画清晰度和文件大小

2.loading 动画,可以实现更复杂的动画且质量不会下降,相对于 GIF 来说更出色

3.礼物动画,对于有大量动画,每个动画都不相同,动画过程中有大量的旋转,透明度,大小的变化,使用 Lottie 会变得更简单,且容易维护

4.闪屏动画

5.转场动画

总结

由于 Lottie 自身的包体积问题,在实际项目中,对于动画要求不高的需求(如:按钮 hover 颜色变化、纯色 loading 转动)且动画使用较少的情况下,使用 css 或 gif 是更好的选择。但在使用动画效果比较频繁的项目或者动画效果要求比较高的项目,就变得十分有利了。

对动画效果要求比较频繁的项目可以结合业务,在不同的状态下请求不同的动画 JSON,相对于 gif 和视频来说,可以大大缩减请求文件的时间,同时效果不会减弱。虽然目前仍存在不少问题,某些特效不支持,AE 的 bodymovin 插件不够完善,JSON 文件的说明不够详细等。但对于它带来的好处来说,仍可值得一试,毕竟软件工程没有银弹。

目录
相关文章
|
存储 弹性计算 开发工具
基于OSS搭建云上个人博客
阿里云OSS,可以托管静态网站,在这个实验中,我们将以Hexo静态博客为例,向您演示如何通过Hexo博客框架快速生成静态博客,以及如何使用Hexo插件将生成的静态博客自动部署至阿里云OSS。
|
6月前
|
人工智能 移动开发 前端开发
AI驱动前端重构:10天完成3000+行复杂组件的跨端复用实践
本文分享了我们团队一次极具代表性的实践:面对一个代码量超3000行、包含数十个平台适配分支的“规格面板”核心组件,我们引入AI开发工具 Cursor 结合 Claude 模型,成功在10天内完成了向ICE架构的全面重构,实现了跨端复用。
842 10
AI驱动前端重构:10天完成3000+行复杂组件的跨端复用实践
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
AI Agent
本文介绍了AI Agent的概念及其在云计算3.0时代的焦点地位,强调了其与大语言模型(LLM)的紧密联系。AI Agent由控制端(Brain)、感知端(Perception)和行动端(Action)组成,能够通过LLMs实现复杂的任务分解、记忆管理及工具使用。文章探讨了单代理、多代理及人机交互的应用场景,并分析了钢铁侠中贾维斯的现实版——微软开源JARVIS项目。此外,还提及了国内外多个开源平台及Python在AI领域的核心地位,同时提出了关于智能代理发展的开放问题,如安全性、群体智能演化及代理服务化等。最后提供了丰富的参考资料以供深入研究。
1373 16
AI Agent
|
安全 Linux 数据安全/隐私保护
深入探索Linux操作系统的多用户管理机制
【10月更文挑战第21天】 本文将详细解析Linux操作系统中的多用户管理机制,包括用户账户的创建与管理、权限控制以及用户组的概念和应用。通过具体实例和命令操作,帮助读者理解并掌握Linux在多用户环境下如何实现有效的资源分配和安全管理。
|
存储 消息中间件 监控
|
Linux 虚拟化
十四、Linux下安装操作系统,虚拟机联网,如何ping通baidu.com网址,以及如何设置静态IP精讲,这一篇足够了。(手把手小白教程)
十四、Linux下安装操作系统,虚拟机联网,如何ping通baidu.com网址,以及如何设置静态IP精讲,这一篇足够了。(手把手小白教程)
1055 0
十四、Linux下安装操作系统,虚拟机联网,如何ping通baidu.com网址,以及如何设置静态IP精讲,这一篇足够了。(手把手小白教程)
|
机器学习/深度学习 存储 人工智能
如何构建可持续的ChatGPT高性能服务器端架构?
与之前的版本相比,GPT-4最大的改进是其多模态(multimodal)能力——它不仅能够阅读文字,还能识别图像。值得注意的是,虽然之前有消息称GPT-4拥有100万亿个参数,但OpenAI并没有证实这个数字。与其相比,OpenAI更强调GPT-4的多模态能力以及其在各种测试中的表现。
1176 0
如何构建可持续的ChatGPT高性能服务器端架构?
|
应用服务中间件 nginx
Nginx的referer参数的用法和原理
总结:referer参数可以用于Nginx配置,以限制或允许特定来源网站的访问,提高安全性或控制流量。它通过valid_referers指令来定义合法的Referer来源,并根据配置对请求进行处理。但需要注意,Referer字段内容可以被伪造,因此不应作为唯一的安全措施。
1672 0
|
存储 机器学习/深度学习 PyTorch
Pytorch学习笔记(9)模型的保存与加载、模型微调、GPU使用
Pytorch学习笔记(9)模型的保存与加载、模型微调、GPU使用
1467 0
Pytorch学习笔记(9)模型的保存与加载、模型微调、GPU使用
|
安全 Java 数据安全/隐私保护
爆肝了!阿里最新版的这份Spring Security源码手册,狂揽GitHub榜首
写在前面 自从 Spring Boot、Spring Cloud 火起来之后,Spring Security 也跟着沾了一把光! 其实我一直觉得 Spring Security 是一个比 Shiro 优秀很多的权限管理框架,但是重量级、配置繁琐、门槛高这些问题一直困扰着 Spring Security 的开发者,也让很多初学者望而却步。直到 Spring Boot 横空出世,这些问题统统都得到缓解。 在 Spring Boot 或者 Spring Cloud 中,如果想选择一个权限管理框架,几乎毫无疑问的选择 Spring Security,Shiro 在这个环境下已经不具备优势了。 但
235 0