前端路由切换时如何加过渡动画?
我在用 Vue Router 做页面切换,想给路由组件加个淡入淡出的过渡效果,但试了几次都不生效。官方文档说要用 包裹 ,我也照做了,可动画就是没出来。
我的写法大概是这样:
<transition name="fade">
<router-view />
</transition>
CSS 里也写了对应的类:
.fade-enter-active, .fade-leave-active {
transition: opacity 0.3s;
}
.fade-enter-from, .fade-leave-to {
opacity: 0;
}
但页面切换时还是硬切,没有任何过渡,是不是哪里漏了?
首先确认你的 Vue 版本是不是 3.x,如果是的话,
fade-enter-from和fade-leave-to是正确的写法。但要是用的是 Vue 2.x,记得把这两个类名改成fade-enter和fade-leave-active。另外有个容易忽略的点:确保你在引入 CSS 过渡类时,样式没有被其他地方覆盖。试试给
.fade-enter-active, .fade-leave-active加上更高的优先级,比如:还有个小技巧,如果还是不行,可以尝试在组件内部加个
<div>包裹 router-view,有时这种嵌套结构反而能让过渡效果正常工作。最后提醒一下,如果用了懒加载组件,记得加上
appear属性,像这样:<transition name="fade" mode="out-in" appear>,这能确保首次加载也有动画效果。这几个方法我试过都有效,希望能帮到你。调试动画有时候确实挺烦人的,加油吧。