先看一个典型的例子:
HTML:
<div id="app">
<button @click="show=!show">切换</button>
<transition name="fade">
<p v-if="show">Hello</p>
</transition>
</div>
JavaScript:
var app=new Vue({
el: "#app",
data: {
show:true,
},
})
CSS:
.fade-enter-active,.fade-leave-active{
transition: opacity .5s;
}
.fade-enter,.fade-leave-to{
opacity: 0;
}
此时点击切换,Hello就有点淡入淡出的效果了。
当插入或删除包含在 transition 组件中的元素时, Vue 将会做以下处理:
1.自动嗅探目标元素是否应用了CSS过渡或动画,如果是,在恰当的时机添加/删除 CSS 类名。
2.如果过渡组件提供了 JavaScript 钩子函数,这些钩子函数将会在恰当时机被调用。
3.如果没有找到 JavaScript 钩子并且也没有检测到 CSS 过渡/动画, DOM 操作(插入/删除)在下一帧中立即执行
过渡的类名
在进入(enter)/离开(leave)的过渡中,会有6个 class 切换。
1. v-enter : 定义进入过渡的开始状态。在元素被插入之前生效,在元素被插入之后的下一帧移除。
2. v-enter-active :定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。
3. v-enter-to : 2.1.8版本及以上 定义进入过渡的结束状态。在元素被插入之后下一帧生效(于此同时 v-enter 被移除),在过渡/动画完成之后移除。
4. v-leave : 定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除。
5. v-leave-active : 定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。这个类可以被用来定义离开过渡的过程时间,延迟和曲线函数。
6. v-leave-to : 2.1.8版本及以上定义离开过渡的结束状态。在离开过渡被触发之后下一帧生效(与此同时 v-leave 被删除),在过渡/动画完成之后移除。
官方文档给出的一张图很详细的描绘出这六种状态:
如果使用没有名字的<transition>,则v-是这些类名的默认前缀,如果有名字则为name-,这个例子为fade-
CSS过渡
我们可以定义不同的进入/离开状态来控制 CSS 过渡效果,例如:
/* 可以设置不同的进入和离开动画 */
/* 设置持续时间和动画函数 */
.slide-fade-enter-active {
transition: all .3s ease;
}
.slide-fade-leave-active {
transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
}
.slide-fade-enter, .slide-fade-leave-to
/* .slide-fade-leave-active for below version 2.1.8 */ {
transform: translateX(10px);
opacity: 0;
}
运用CSS3动画可以添加更多丰富的过渡效果