vue实现路由动画
Vue 实现路由动画的方法
使用 <transition> 组件包裹 <router-view>
在 Vue 中可以通过 <transition> 组件为 <router-view> 添加过渡效果。确保 <router-view> 被 <transition> 包裹,并设置 name 属性以定义动画类名。
<transition name="fade">
<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.transition:
const routes = [
{
path: '/home',
component: Home,
meta: { transition: 'fade' }
},
{
path: '/about',
component: About,
meta: { transition: 'slide' }
}
];
在组件中使用动态过渡:
<transition :name="$route.meta.transition || 'fade'">
<router-view></router-view>
</transition>
定义对应的 CSS 样式:

.slide-enter-active, .slide-leave-active {
transition: transform 0.5s;
}
.slide-enter {
transform: translateX(100%);
}
.slide-leave-to {
transform: translateX(-100%);
}
使用 JavaScript 钩子实现复杂动画
通过 <transition> 的 JavaScript 钩子(如 enter 和 leave)可以实现更复杂的动画逻辑:
<transition
@before-enter="beforeEnter"
@enter="enter"
@leave="leave"
:css="false"
>
<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
});
}
}
使用第三方动画库(如 Animate.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 name="fade">
<router-view></router-view>
</transition>
在子组件中同样使用 <transition>:
<transition name="slide">
<router-view></router-view>
</transition>






