vue实现路由动画
Vue 实现路由动画的方法
在 Vue 中实现路由动画可以通过 Vue Router 和 Vue 的过渡系统(Transition)结合完成。以下是具体实现方式:
使用 <transition> 组件包裹 <router-view>
在 Vue 模板中,用 <transition> 包裹 <router-view>,并设置动画效果。Vue 提供了过渡类名(如 v-enter、v-leave-to)来控制动画。
<transition name="fade" mode="out-in">
<router-view></router-view>
</transition>
通过 CSS 定义动画效果:
.fade-enter-active, .fade-leave-active {
transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
动态设置过渡效果
可以通过路由元信息(meta)动态设置不同的过渡效果。在路由配置中定义 meta 字段:

const routes = [
{
path: '/home',
component: Home,
meta: { transition: 'slide' }
},
{
path: '/about',
component: About,
meta: { transition: 'fade' }
}
];
在组件中根据 meta.transition 动态绑定过渡名称:
<transition :name="$route.meta.transition || 'fade'">
<router-view></router-view>
</transition>
使用 JavaScript 钩子实现复杂动画
如果需要更复杂的动画逻辑,可以通过 Vue Transition 的 JavaScript 钩子(如 enter、leave)实现:
<transition
@before-enter="beforeEnter"
@enter="enter"
@leave="leave"
>
<router-view></router-view>
</transition>
在方法中定义动画行为:

methods: {
beforeEnter(el) {
el.style.opacity = 0;
},
enter(el, done) {
gsap.to(el, {
opacity: 1,
duration: 0.5,
onComplete: done
});
},
leave(el, done) {
gsap.to(el, {
opacity: 0,
duration: 0.5,
onComplete: done
});
}
}
结合 CSS 动画库
可以直接使用 CSS 动画库(如 Animate.css)快速实现路由动画:
<transition
enter-active-class="animate__animated animate__fadeIn"
leave-active-class="animate__animated animate__fadeOut"
>
<router-view></router-view>
</transition>
确保在项目中引入 Animate.css:
import 'animate.css';
嵌套路由动画
对于嵌套路由,需要在子路由的 <router-view> 外层也包裹 <transition>,并注意 mode="out-in" 避免同时渲染的问题:
<transition name="nested" mode="out-in">
<router-view></router-view>
</transition>
通过以上方法,可以灵活实现 Vue 路由切换时的动画效果。





