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

简介: 由于各个动画实现方案有着各种问题,所以十分需要有一种简单、高效、体积小、还原度高的动画解决方案。在一次偶然的情况下,朋友推荐了 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。
|
Ubuntu 调度 Docker
2024.3.21隐语训练营第4讲笔记:SecretFlow & SecretNote安装部署
本文介绍了SecretFlow和SecretNote的安装和部署
784 3
|
API 开发者
工作日和节假日api
节假日api核心服务托管在阿里云之上,API天然分布式、高可用。
|
3月前
|
人工智能 移动开发 前端开发
AI驱动前端重构:10天完成3000+行复杂组件的跨端复用实践
本文分享了我们团队一次极具代表性的实践:面对一个代码量超3000行、包含数十个平台适配分支的“规格面板”核心组件,我们引入AI开发工具 Cursor 结合 Claude 模型,成功在10天内完成了向ICE架构的全面重构,实现了跨端复用。
AI驱动前端重构:10天完成3000+行复杂组件的跨端复用实践
|
12月前
|
传感器 JavaScript 前端开发
利用TypeScript提升代码质量和开发效率
TypeScript作为JavaScript的超集,通过引入静态类型系统和面向对象特性,显著提升了代码质量和开发效率。本文介绍了TypeScript的基本概念、优势及最佳实践,包括基础类型注解、接口与类的使用、类型推断、高级类型、装饰器应用及现代工具的集成,帮助开发者构建更健壮的应用程序。
|
传感器 人工智能 物联网
智能环境监测:城市空气质量与气候控制
【10月更文挑战第23天】智能环境监测技术利用物联网、大数据、云计算和人工智能,对城市空气质量与气候进行实时、高精度监测,通过数据分析预测环境变化,助力环境保护与决策,促进城市可持续发展。
|
12月前
|
安全 Linux 数据安全/隐私保护
深入探索Linux操作系统的多用户管理机制
【10月更文挑战第21天】 本文将详细解析Linux操作系统中的多用户管理机制,包括用户账户的创建与管理、权限控制以及用户组的概念和应用。通过具体实例和命令操作,帮助读者理解并掌握Linux在多用户环境下如何实现有效的资源分配和安全管理。
|
数据采集 存储 JavaScript
JS逆向案例:巨潮资讯数据采集
JS逆向案例:巨潮资讯数据采集
362 0
|
机器学习/深度学习 存储 人工智能
如何构建可持续的ChatGPT高性能服务器端架构?
与之前的版本相比,GPT-4最大的改进是其多模态(multimodal)能力——它不仅能够阅读文字,还能识别图像。值得注意的是,虽然之前有消息称GPT-4拥有100万亿个参数,但OpenAI并没有证实这个数字。与其相比,OpenAI更强调GPT-4的多模态能力以及其在各种测试中的表现。
1082 0
如何构建可持续的ChatGPT高性能服务器端架构?
|
存储 编解码 Shell
【Shell 命令集合 系统设置 】⭐Linux 设置和调整帧缓冲设备 fbset命令 使用指南
【Shell 命令集合 系统设置 】⭐Linux 设置和调整帧缓冲设备 fbset命令 使用指南
439 0