背景
「医生大会 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系列文章 共有好几篇 - 腾讯某团队,其中包含原理解析