``包裹是最常用有效的路由动画实现方式,关键在于正确配置class、key和mode;需定义4个核心CSS类,推荐mode="out-in";通过路由meta动态绑定name实现差异化动画;共用组件时用: key="route.fullPath"强制重建;可集成Animate.css简化开发。

直接用 `
基础写法:一个 transition 管所有路由
在根组件或 Layout 中,把 `
- name 属性决定 CSS 类名前缀,比如
name="fade"就对应.fade-enter-active等类 - 必须定义至少 4 个核心类:
xxx-enter-active、xxx-leave-active(过渡过程)、xxx-enter-from、xxx-leave-to(起止状态) - 推荐加上
mode="out-in",避免新旧页面短暂重叠
区分不同路由的动画效果
每个页面切换方向或类型不同,动画也该有区别。靠路由元信息(meta)动态绑定:
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
- 在路由配置中为每条 route 设置
meta: { transition: 'slide-left' } - 用
v-slot解构出 Component 和 route,再把:name="route.meta.transition || 'fade'"绑定到 transition 上 - 这样 /home 进来是 slide-left,/about 进来可能是 fade,互不影响
解决复用组件不触发动画的问题
当两个路由共用同一个组件(比如 /user/1 和 /user/2 都用 User.vue),Vue 默认复用实例,transition 不会重新触发。
立即学习“前端免费学习笔记(深入)”;
- 给 `
` 加上 :key="route.fullPath"或:key="route.path",强制重建实例 - 如果用了
<keep-alive>,还要配合:include白名单和exclude黑名单精细控制缓存范围 - 注意:key 改变会清空组件内部状态,如需保留表单数据,得手动处理或改用其他方案
配合第三方动画库快速上手
不想手写 CSS 动画?可直接集成 Animate.css:
- 安装:npm install animate.css
- 引入:在 main.ts 或全局样式中 import 'animate.css'
- 使用:
:enter-active-class="'animate__animated animate__fadeInRight'",配合 v-slot 写法 - 注意 class 名要带
animate__前缀,且必须同时加animate__animated


















