transition 组件实现动画效果
在 CSS 3 动画中,transition 是一个方案,animation 是另一个方案。在前面的演示代码中讲解了如何将 transition 组件与 CSS 3 的 transition 结合来实现过渡效果。下面来讲解如何将 transition 组件与 CSS 3 的 animation 结合来实现动画。
animation 实现动画效果在于使用 @keyframes 来定义不同阶段的 CSS 样式。将前面的代码进行改造,如示例代码 5-3-1 所示。
@keyframes bounce-in {
0% {
transform: scale(0);
}
50% {
transform: scale(1.5);
}
100% {
transform: scale(1);
}
}
.bounce-enter-active {
animation: bounce-in .5s;
}
.bounce-leave-active {
animation: bounce-in .5s reverse;
}
在上面的代码中定义了一个 bounce-in 的动画,效果就是元素在显示和隐藏时有一个 “变大缩小” 的效果。reverse 表示动画反向播放。同时,定义了 .bounce-enter-active 和 .bounce-leave-active 来使用这个动画。下面修改一下组件的相关代码,如示例代码 5-3-2 所示。
示例代码5-3-2 将 transition 组件与 CSS 3 的 animation 结合实现动画2
<div id="app">
<button @click="clickCallback">切换</button>
<transition name="bounce">
<div v-if="show">Hello!</div>
</transition>
</div>
Vue.createApp({
data(){
return {show: false}
},
methods:{
clickCallback(){
this.show = !this.show
}
}
}).mount("#app")
在这个例子中,使用 v-show 指令来实现元素的显示和隐藏,当我们单击按钮时,会看到 Hello! 的动画效果,具体在什么时机应用哪些动画 class 类,可以参考之前讲解的 6 个 class 类及含义。使用 transition 组件实现 CSS 的动画原理和 CSS 的过渡效果类似,都需要在动画的关键时机制定对应的 CSS 样式,区别是:在动画中,v-enter 类名在节点插入 DOM 后不会立即被删除,而是在 animationend 事件触发时(动画结束时)被删除。在这个代码段中定义了一个 name 是 bounce 的 transition 组件,在显示动画生效时会套用 .bounce-enter-active 的样式,在隐藏动画生效时会套用 .bounce-leave-active 的样式。而隐藏时,动画效果就会反着播放。