vue transition 全局
时间: 2025-01-01 09:26:02 浏览: 45
### 实现全局过渡效果
在 Vue.js 中,可以通过定义全局组件并利用 `<transition>` 或者 `<transition-group>` 组件来实现全局过渡效果[^1]。为了使过渡效果应用于整个应用程序,通常的做法是在根实例 (`App.vue`) 的模板中包裹一层 `<transition>`。
下面是一个简单的例子展示如何设置一个全局淡入淡出的效果:
```html
<template>
<div id="app">
<!-- 使用 transition 标签 -->
<transition name="fade" mode="out-in">
<router-view></router-view>
</transition>
</div>
</template>
<style scoped>
/* 定义 fade 过渡类 */
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.5s;
}
.fade-enter-from,
.fade-leave-to {
opacity: 0;
}
</style>
```
此代码片段展示了如何通过 CSS 类控制进入和离开动画的时间以及样式变化。`mode="out-in"` 属性确保当前视图会在新视图出现之前消失[^2]。
对于更复杂的场景,比如想要根据不同路由应用不同的过渡效果,则可以在 `beforeEach` 导航守卫里动态改变过渡名称:
```javascript
// router/index.js
import Vue from 'vue';
import Router from 'vue-router';
Vue.use(Router);
const router = new Router({
routes: [
{ path: '/', component: Home },
{ path: '/about', component: About }
]
});
let previousRouteName;
router.beforeEach((to, from, next) => {
const toDepth = to.path.split('/').length;
const fromDepth = from.path.split('/').length;
if (toDepth === fromDepth || !previousRouteName) {
Vue.prototype.$transitonName = '';
} else if (toDepth > fromDepth) {
Vue.prototype.$transitonName = 'slide-left'; // 自定义滑动方向
} else {
Vue.prototype.$transitonName = 'slide-right';
}
previousRouteName = to.name;
next();
});
```
之后,在 `App.vue` 文件内修改如下:
```html
<template>
<div id="app">
<transition :name="$root.$options.transitionName" mode="out-in">
<router-view></router-view>
</transition>
</div>
</template>
```
这样就可以基于路径深度的不同而切换不同类型的过渡效果了[^3]。
阅读全文
相关推荐

















