接上一篇文章,最近ui优化做的比较多,动效优化也是其中一部分。
动效的几种使用方式也都尝试过了,所以吧,做个小结记录一下~
使用方式
- 手写动效
css写法vue写法
- 第三方动效库
animejslottie
手写动效
手写动效,使用 css 来描述样式,适用于较简单的动效
css 写法
- 制定父元素的
transition属性后,子元素的 show 和 hide 都会有动效,如果只在子元素里写transition(比如hover),则只在 show 的时候有动效 transition:要显示的动效类型,时间,持续显示方式 –all/transform/等,1000ms/s,ease/ease-in-out/linear/等- 具体样式:包括
opacity、translate、scale、rotate等。
Demo

相关代码
1 | <div class="title" @click="clickIcon"> |
1 | .title { |
Vue 写法
和传统的 css 写法不同,Vue 写法多了一个 transition 和 transition-group 的写法
- 使用
name='x'+x-YYYY的写法来描述动效过程 - 只有在组件切换的时候才会触发动效
v-ifv-show- 动态组件
- 组件根节点
- 动效过程
x-enter: 动效开始前(vue3 改为x-enter-from)x-enter-active: show 动效结束前x-leave-active: hide 动效开始前x-leave-to: 动效结束后- 搭配手写的
css动效,可以实现更多效果
transition-group- 必须是多个子元素,每个子元素包含唯一的
key, - 子元素 show/hide 切换是无动效的,为了添加平滑动效,可以使用
x-move
- 必须是多个子元素,每个子元素包含唯一的
Demo

相关代码
1 | <transition-group name="g" tag="ul"> |
1 | // 其他li位置移动时,动效平滑 |
第三方动效库
第三方库动效,通过 js 来调用,适用于较复杂的动效
本次优化中使用到的第三方库有 animejs 和 lottie
animejs
- 使用
js即可编写复杂的动效 - 使用文档
Demo

相关代码
1 | <div class="login"> |
1 | <script> |
lottie
lottie 是一种跨平台的动效方案。ui小姐姐设计好动效后,利用插件导出 json,然后使用不同平台的 lottie + 同一份 json 文件,即可实现不同平台下的相同动效,极大的降低了动效开发的成本。
Demo

相关代码
1 | <div ref="lott" class="lottie"></div> |
1 | import lottie from 'lottie-web' |