接上一篇文章,最近ui优化做的比较多,动效优化也是其中一部分。
动效的几种使用方式也都尝试过了,所以吧,做个小结记录一下~
使用方式
- 手写动效
css
写法vue
写法
- 第三方动效库
animejs
lottie
手写动效
手写动效,使用 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-if
v-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' |