页面切换动画怎么实现平滑过渡? 子晨 Dev 提问于 2026-03-13 16:31:17 阅读 9 组件 我在用 Vue 做一个单页应用,想在路由切换时加个淡入淡出的动画,但试了 transition 包裹 router-view 后没效果。是不是哪里写错了? 我的代码是这样写的: <transition name="fade"> <router-view /> </transition> 然后 CSS 里写了 .fade-enter-active { opacity: 0; },但页面切换还是硬切,完全没有动画……求指点! 我来解答 赞 0 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 极客甜茜 Lv1 问题在于你的 CSS 写错了。.fade-enter-active 是动画执行中的状态,你把 opacity: 0 写在这里完全没效果。 Vue transition 的几个 class 是这样的逻辑:.fade-enter-from 是进入的初始状态,.fade-enter-to 是进入的结束状态,.fade-enter-active 只是定义过渡效果本身。 你需要的写法是: .fade-enter-active, .fade-leave-active { transition: opacity 0.3s ease; } .fade-enter-from, .fade-leave-to { opacity: 0; } 这样进入时从透明渐变到显示,离开时从显示渐变到透明。 另外如果你的页面切换还是没效果,可以试试给 router-view 加个 key: 因为 Vue 默认会复用组件,加上 key 强制让它重新创建,transition 才能触发。 回复 点赞 2026-03-13 17:02 加载更多 相关推荐 2 回答 188 浏览 页面切换动画组件如何实现平滑过渡?元素位置跳动问题怎么解决? 我在用Vue的Transition组件做路由切换动画时,新页面元素总会出现0.5秒的跳动。已经给容器加了固定宽高,但当使用transform: translateX()动画时,内容区域还是会有位置偏移... 司空栾同 组件 2026-02-04 01:49:28 2 回答 40 浏览 Vue路由切换时如何实现平滑过渡动画? 我在用 Vue 3 + Vue Router 做页面切换,想加个淡入淡出的过渡效果,但试了 transition 包 router-view 后动画根本不触发,页面直接闪过去。是不是我写法有问题? 这... IT人钰曦 优化 2026-02-24 19:59:18 1 回答 60 浏览 Nuxt页面切换时过渡动画不生效是怎么回事? 我在 Nuxt 3 项目里给页面加了 transition,但切换路由时完全没看到动画效果,好像直接跳转了。明明在 pages/index.vue 里写了 definePageMeta({ pageT... 辽源🍀 框架 2026-02-24 05:17:20 2 回答 36 浏览 React路由切换时过渡动画卡顿怎么办? 大家好,我在用React Router做页面切换过渡动画时遇到问题。我给路由组件加了Animate.css的fadeIn动画,但切换页面时动画有时候会卡顿或者直接跳过。我尝试在useEffect里手动... 长孙卫华 优化 2026-02-15 20:14:33 2 回答 58 浏览 Nuxt 3页面过渡时进入动画和离开动画同时触发怎么办? 在Nuxt 3项目里给布局加了页面过渡,但切换路由时进出动画会同时闪一下。用了mode="out-in"也没用,代码是这样的: <template> <transition mode... 极客羽霏 框架 2026-02-03 21:48:34 2 回答 98 浏览 Vue路由切换时的过渡动画导致页面卡顿怎么办? 最近在给Vue项目加路由过渡效果,用了transition标签做滑动切换,但发现每次路由变化时页面会卡顿半秒。尝试过把mode设成out-in,动画虽然顺眼了,但滚动位置会突然跳到顶部,而且新页面内容... 小馨予 优化 2026-01-29 11:44:51 1 回答 13 浏览 Zoom缩放动画在React中如何实现平滑过渡? 我用React写了个简单的缩放动画,但元素放大时会突然跳变,没有平滑过渡,试了加transition也没用,是哪里写错了吗? const ZoomBox = () => { const [isZ... 小静怡 组件 2026-03-07 15:42:20 1 回答 24 浏览 Vue路由切换时过渡动画为什么会有重叠闪烁? 在用Vue Router做页面切换时,给router-view加了标签和CSS动画,但新旧页面会同时显示半秒,出现重叠闪烁。试过设置appear和调整css时长都没用,这是怎么回事? 代码是这样的: ... シ东宁 前端 2026-02-13 14:01:30 1 回答 100 浏览 国际化切换语言后页面内容没更新怎么办? 我在用 i18next 做国际化,切换语言时路由和 store 都变了,但页面上的文本还是旧的,得手动刷新才生效。是不是漏了什么监听机制? 试过调用 i18n.changeLanguage,也用了 u... 东方利娜 优化 2026-03-11 00:35:16 1 回答 11 浏览 国际化切换后页面布局错乱怎么办? 我用 i18n 做多语言切换,但切换到阿拉伯语时整个页面布局都乱了,文字方向没变,元素还重叠了。明明加了 dir="auto" 啊,是不是哪里漏了? 这是我的 HTML 结构: <html la... 宇文俊俊 优化 2026-03-10 11:06:23
.fade-enter-active是动画执行中的状态,你把opacity: 0写在这里完全没效果。Vue transition 的几个 class 是这样的逻辑:
.fade-enter-from是进入的初始状态,.fade-enter-to是进入的结束状态,.fade-enter-active只是定义过渡效果本身。你需要的写法是:
这样进入时从透明渐变到显示,离开时从显示渐变到透明。
另外如果你的页面切换还是没效果,可以试试给 router-view 加个 key:
因为 Vue 默认会复用组件,加上 key 强制让它重新创建,transition 才能触发。