背景
「医生大会 2020 回顾」设计师动画实现比较炫酷

这造成了「设计师日益增长的炫酷视觉效果需要」与「落后的前端工程师动画能力」之间的矛盾
我们来看一看 2019 年负责这个 case 的前端工程师是怎么处理这个矛盾的
使用 web 标准限制设计师能力的发挥,让其只能在 rotate、translate、opacity 等效果中自由组合
于是就有了这样的代码
// 旋转效果@keyframes rotating {from {transform: rotate(0);}to {transform: rotate(360deg);}}// 打字效果@keyframes typing {from {width: 0;}}// 从上往下渐显@keyframes showdown {0% {transform: translateY(-10px);opacity: 0;}100% {transform: translateY(0);opacity: 1;}}// 从下往上渐显@keyframes showup {0% {transform: translateY(10px);opacity: 0;}100% {transform: translateY(0);opacity: 1;}}
如何用较低的技术成本实现炫酷的动画?Lottie 就是一个不错的方案
lottie 是什么
直接看 lottie 的官方介绍


从中摘录一些关键词
- 设计师在设计工具(这里特指了 Adobe After Effects 通俗来讲叫 AE)中使用一个叫 Bodymovin 的插件导出 json 文件
- 工程师在客户端(可以跨平台)上使用 Lottie 解析 json,并且渲染动画
如何使用
在 vue 项目中可以直接使用 vue-lottie 这个包,使用非常简单易懂
<template><div><lottie class="lottie-container" :options="animationOptions" :width="200" :height="200" /></div></template><script>import animation_json from 'xxx/animation.json';import lottie from 'vue-lottie';export default {components: {lottie,},data() {return {animationOptions: {animationData: animation_json,loop: true,autoplay: true}}}}</script><style lang="scss" scoped>.lottie-container {position: absolute;right: 0;top: 0;}</style>
注意事项
1.组件需要给定宽高属性,每一个动画都可以理解为是在一个矩形区域内出现的,在做动画定位的时候根据这个矩形区域来即可(设计师会在设计稿上标注动画区域的定位)

比如说这个动画贴着右下角,直接通过 CSS 定位到页面右下角,同时我们的页面背景图片采用 background-position: bottom 的定位策略,确保动画与背景的底部能够合得上
2.整个容器是一个块级元素,可以在通过 CSS 控制样式
3.图片的路径会是一个比较难解决的问题
设计师的一个动画会提供以下素材

- 动画的 json 文件
- 能够运行的 web demo
- 图片素材
这是设计师提供的 JSON 文件

直接使用这个路径,通常会有问题,提供一个思路,将图片上传后,路径改为绝对路径即可

4.一个页面同时可能有多个动画,目前的拆分/合并思路是是否可以一起定位,如果能够一起定位,就做成一个,不能就拆分成多个

比如这个动画,左下角与右下角的动画需要拆分,分别依据左下角和右下角定位,否则在宽屏的机器上就会有问题
5.虽说 Lottie 解放了设计师的想象力,但同样也有限制,需要设计师遵循 Lottie 的设计规范,不然导出的动画会有各种各样的问题
6.跑通 Lottie 流程需要与设计师共同探索,反复沟通,这与之前的设计协作流畅有差异
7.从实际的视觉效果来看,在大部分性能较为强悍的机器上肉眼可见的高帧率,清晰,但在一些年代较为久远的机器上会有卡顿现象出现
本次 Lottie 的使用仅仅是一个从 0 到 1 的尝试,调研途中参考了非常多的优质资料,推荐想深入了解的同学们阅读:
参考
- 使用Lottie 快速开发动画
- lottie-web的动画图片加载处理-这篇文章里面有 webpack 相关路径的解决
- lottie-官网
- lottie 的官方资源库类似画廊
- Lottie-前端实现AE动效-segmentfault
- 深度剖析 Lottie 动画原理 - 腾讯某团队
- lottie系列文章 共有好几篇 - 腾讯某团队,其中包含原理解析
