前端动画实现 —— lottie
前端常用动效实现方式
CSS3 帧动画
CSS 发展到了今天,它的强大几乎不是我们可以想想到的。合理的使用Animation可以实现很多神奇效果。配合设计师的导出图,前端使用序列帧即可实现动画效果。
帧动画的缺点和局限性比较明显,导出图文件大,且在不同屏幕分辨率下可能会失真。
JS
通过JS方法控制DOM,从而实现动画效果
GIF
最常用
canvas/svg
js + canvas/svg 应该是目前前端实现复杂动效的最优方案了,但要注意canvas和svg二者之间区别,根据不同使用场景选取最优的实现方案。
SVG
SVG 是一种使用 XML 描述 2D 图形的语言。
SVG 基于 XML,这意味着 SVG DOM 中的每个元素都是可用的。您可以为某个元素附加 JavaScript 事件处理器。
在 SVG 中,每个被绘制的图形均被视为对象。如果 SVG 对象的属性发生变化,那么浏览器能够自动重现图形。
Canvas
Canvas 通过 JavaScript 来绘制 2D 图形。
Canvas 是逐像素进行渲染的。
在 canvas 中,一旦图形被绘制完成,它就不会继续得到浏览器的关注。如果其位置发生变化,那么整个场景也需要重新绘制,包括任何或许已被图形覆盖的对象。
主要区别如下:
Canvas
1.依赖分辨率
2.不支持事件处理器
3.弱的文本渲染能力
4.能够以 .png 或 .jpg 格式保存结果图像
5.最适合图像密集型的游戏,其中的许多对象会被频繁重绘
SVG
1.不依赖分辨率
2.支持事件处理器
3.最适合带有大型渲染区域的应用程序(比如谷歌地图)
4.复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快)
5.不适合游戏应用
Lottie
Lottie一个适用于Web,Android,iOS,React Native和Windows 的移动库,它可以使用Bodymovin解析以json 格式导出的Adobe After Effects动画,并在移动设备上进行本地渲染!
所有这些动画都是在After Effects中创建的,使用Bodymovin导出,并在本机渲染,无需额外的工程工作。 Bodymovin是由Hernan Torrisi创建的After Effects插件,它将After Effects文件导出为json并包含一个javascript网络播放器。我们建立在他的伟大工作之上,将其用途扩展到Android,iOS,React Native和Windows。(都是UI的工作,前端不需要管)
lottie-web
安装
API 介绍
Lottie-web 常用方法
Lottie-web 常用的事件
data_ready:动画数据加载完毕
config_ready:完成初始配置后
data_failed:当无法加载动画的一部分时
loaded_images:当所有图像加载成功或错误时
DOMLoaded:将元素添加到DOM时