vue3实现路由页面跳转的过渡动画
时间: 2023-08-12 18:38:28 浏览: 225
vue元素实现动画过渡效果
好的,针对您的问题,我可以提供以下的解决方案:
Vue3 中可以通过在路由配置中设置 `meta` 字段来指定页面跳转的过渡动画。具体步骤如下:
1. 在路由配置中设置 `meta` 字段,例如:
```javascript
const routes = [
{
path: '/',
name: 'Home',
component: Home,
meta: {
transitionName: 'slide-right' // 指定页面进入的动画名称
}
},
{
path: '/about',
name: 'About',
component: About,
meta: {
transitionName: 'slide-left' // 指定页面离开的动画名称
}
}
];
```
2. 在根组件中,通过 `watch $route` 监听路由变化,根据 `meta.transitionName` 判断当前页面是进入还是离开,并为根元素添加对应的 CSS 类名,例如:
```javascript
<template>
<div :class="transitionName">
<router-view />
</div>
</template>
<script>
export default {
name: 'App',
watch: {
$route(to, from) {
const toName = to.meta.transitionName;
const fromName = from.meta.transitionName;
if (toName === fromName) {
return;
}
if (toName) {
this.transitionName = toName + '-enter';
}
if (fromName) {
this.transitionName = fromName + '-leave';
}
setTimeout(() => {
this.transitionName = '';
}, 1000);
}
},
data() {
return {
transitionName: ''
};
}
};
</script>
<style>
.slide-right-enter,
.slide-right-leave-to {
transform: translateX(100%);
opacity: 0;
transition: all 1s;
}
.slide-left-enter,
.slide-left-leave-to {
transform: translateX(-100%);
opacity: 0;
transition: all 1s;
}
.slide-right-enter-to,
.slide-left-leave {
transform: translateX(0);
opacity: 1;
}
.slide-left-enter-to,
.slide-right-leave {
transform: translateX(0);
opacity: 1;
}
</style>
```
在以上代码中,我们通过 `watch $route` 监听路由变化,根据当前页面进入或离开的动画名称为根元素添加对应的 CSS 类名,例如 `slide-right-enter` 表示页面从右侧进入,`slide-right-leave-to` 表示页面从右侧离开。在 CSS 样式中,我们为这些类名设置进入和离开的动画效果,并在动画结束后移除这些类名,以便下一次动画的执行。
希望以上解决方案能够帮到您!
阅读全文