vue实现切换特效
Vue 实现切换特效的方法
Vue 提供了多种方式来实现页面或元素的切换特效,主要依赖于过渡(Transition)和动画(Animation)机制。以下是几种常见的方法:
使用 Vue 的 <transition> 组件
Vue 内置了 <transition> 组件,可以方便地为元素添加进入/离开的过渡效果。通过 CSS 或 JavaScript 钩子实现动画。
<transition name="fade">
<div v-if="show">内容</div>
</transition>
对应的 CSS 样式:
.fade-enter-active, .fade-leave-active {
transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
使用 CSS 动画
通过 <transition> 结合 CSS 的 @keyframes 实现更复杂的动画效果。
<transition name="slide">
<div v-if="show">滑动内容</div>
</transition>
对应的 CSS 样式:
.slide-enter-active {
animation: slide-in 0.5s;
}
.slide-leave-active {
animation: slide-out 0.5s;
}
@keyframes slide-in {
from { transform: translateX(100%); }
to { transform: translateX(0); }
}
@keyframes slide-out {
from { transform: translateX(0); }
to { transform: translateX(-100%); }
}
使用第三方动画库
集成第三方动画库(如 Animate.css)可以快速实现丰富的切换特效。
安装 Animate.css:
npm install animate.css
在 Vue 中使用:
<transition
enter-active-class="animate__animated animate__fadeIn"
leave-active-class="animate__animated animate__fadeOut"
>
<div v-if="show">动画内容</div>
</transition>
路由切换动画
通过 Vue Router 实现页面路由切换时的过渡效果。
<router-view v-slot="{ Component }">
<transition name="route" mode="out-in">
<component :is="Component" />
</transition>
</router-view>
对应的 CSS 样式:
.route-enter-active, .route-leave-active {
transition: opacity 0.3s, transform 0.3s;
}
.route-enter-from {
opacity: 0;
transform: translateX(100px);
}
.route-leave-to {
opacity: 0;
transform: translateX(-100px);
}
动态切换特效
通过动态绑定过渡名称实现多种特效切换。
<transition :name="transitionName">
<div v-if="show">动态内容</div>
</transition>
在脚本中定义:
data() {
return {
transitionName: 'fade'
}
}
使用 JavaScript 钩子
通过 JavaScript 钩子实现更复杂的动画逻辑。
<transition
@before-enter="beforeEnter"
@enter="enter"
@after-enter="afterEnter"
>
<div v-if="show">钩子内容</div>
</transition>
对应的脚本方法:
methods: {
beforeEnter(el) {
el.style.opacity = 0;
},
enter(el, done) {
gsap.to(el, {
opacity: 1,
duration: 0.5,
onComplete: done
});
},
afterEnter(el) {
console.log('动画完成');
}
}
注意事项
- 过渡模式(
mode)可以设置为in-out或out-in,控制进入和离开的顺序。 - 列表过渡使用
<transition-group>组件,为多个元素添加动画。 - 性能优化:避免使用过多复杂的动画,尤其是在移动设备上。







