Vue3项目路由页面animation与transition切换动画不生效求助
Vue3路由切换过渡动画不生效排查方案
- 修正key绑定位置
你当前把key绑定在了<router-view>上,应该将唯一key绑定到<transition>的直接子元素<component>上,才能让transition正确检测组件的切换变化,修正后的模板代码如下:
- 修正key绑定位置
<template> <app-header /> <router-view v-slot="{ Component }"> <transition name="fade" mode="out-in"> <component :is="Component" :key="$route.fullPath" /> </transition> </router-view> <app-footer /> <div @click="pageTop()" class="downUpArrow"> <i class="fas fa-chevron-up"></i> </div> </template>
注:你代码中原<app-foother>拼写有误,同步修正为<app-footer>
- 检查是否添加了正确的Vue3过渡样式
Vue3的过渡类名和Vue2有差异,不要使用旧的fade-enter、fade-leave类名,需要使用如下标准的Vue3过渡类名定义样式:
- 检查是否添加了正确的Vue3过渡样式
/* 进入动画的开始状态、离开动画的结束状态 */ .fade-enter-from, .fade-leave-to { opacity: 0; transform: translateX(10px); } /* 进入和离开过程中的过渡配置 */ .fade-enter-active, .fade-leave-active { transition: all 0.3s ease; } /* 进入动画的结束状态、离开动画的开始状态 */ .fade-enter-to, .fade-leave-from { opacity: 1; transform: translateX(0); }
- 确认路由对应的页面组件为单根结构
Vue3支持多根组件,但<transition>仅能对单根元素生效,如果你切换的页面组件是多根结构,需要给页面组件外层加一个统一的根元素包裹,比如用<div>把整个页面组件的内容包起来。
- 确认路由对应的页面组件为单根结构
- 检查是否有全局样式冲突
如果有全局的* { transition: none !important }之类的样式,或者页面组件根元素上定义了优先级更高的transition样式覆盖了过渡类的配置,也会导致动画失效,可以在浏览器开发者工具中检查元素的样式优先级确认。
- 检查是否有全局样式冲突
内容的提问来源于stack exchange,提问作者rtyuttter
相关产品推荐
相关产品推荐

