# transition过渡&动画
API (opens new window)
# 使用
需要设置动画的元素或组件要在外边包裹一个<transition>
标签,设置自定义的name
,vue会根据元素的切换(进入/离开)过程添加相应的css类名,你可以自由地使用css类名来设置css过渡&动画。
# 过渡的类名
在进入/离开的过渡中,会有 6 个 class 切换。
各类名的生命周期
- 进入
v-enter
只存在于第一帧v-enter-active
第一帧到最后一帧,结束后移除v-enter-to
第二帧到最后一帧,结束后移除
- 离开
v-leave
只存在于第一帧v-leave-active
第一帧到最后一帧,结束后移除v-leave-to
第二帧到最后一帧,结束后移除
如果你使用一个没有name
的<transition>
,则 v-
是这些类名的默认前缀。如果你使用了name="fade"
,那么 v-
前缀会替换为 fade-
。
# css过渡 demo
HTML
代码语言:javascript复制<div id="root">
<button @click="handleClick">切换</button>
<transition name="fade">
<div v-show="show">hello world</div>
</transition>
</div>
CSS
代码语言:javascript复制.fade-enter{
/*第一帧,opacity是0,第二帧开始被移除,即变成1,*/
opacity: 0
}
.fade-enter-active{
/*当监控到opacity变化的时候(即从0到1),给2s的过渡*/
transition: opacity 1s;
}
.fade-leave-to{
/*首先,opacity是1,离开的第二帧变成0,*/
opacity: 0
}
.fade-leave-active{
/*当监控到opacity变化的时候(即从1到0),给2s的过渡*/
transition: opacity 1s;
}
/*简化代码*/
/*
.fade-enter,
.fade-leave-to{
opacity: 0;
}
.fade-enter-active,
.fade-leave-active{
transition: opacity 2s;
}
*/
JS
代码语言:javascript复制var vm = new Vue({
el: '#root',
data: {
show: true
},
methods: {
handleClick() {
this.show = !this.show
}
}
})
# css动画 demo
HTML
代码语言:javascript复制<div id="root">
<button @click="show = !show">切换</button>
<transition name="bounce">
<p v-if="show">文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容</p>
</transition>
</div>
CSS
代码语言:javascript复制.bounce-enter-active {
animation: bounce-in .5s;
}
.bounce-leave-active {
animation: bounce-in .5s reverse;
}
@keyframes bounce-in {
0% {
transform: scale(0);
}
50% {
transform: scale(1.5);
}
100% {
transform: scale(1);
}
}
JS
代码语言:javascript复制var vm = new Vue({
el: '#root',
data: {
show: true
}
})
# 组件中使用的示例
代码语言:javascript复制<template>
<transition name="slide">
<div class="add-song">
...
</div>
</transition>
<template>
代码语言:javascript复制 .add-song
&.slide-enter-active, &.slide-leave-active
transition: all 0.3s
&.slide-enter, &.slide-leave-to
transform: translate3d(100%, 0, 0)