Vue-Router 第十二节:路由过渡动效

102 阅读1分钟

Vue-Router 第十二节:路由过渡动效

1、所有路由使用相同过渡

想要在你的路径组件上使用转场,并对导航进行动画处理,你需要使用插槽:

此用法会对所有的路由使用相同的过渡。

 <router-view #default="{route , Component }">                   
      <transition name="fade">                              <!--  name 为 fade的过渡效果名  -->
        <component :is="Component" />                       
      </transition>
    </router-view>

2、单个路由过渡

上面的用法会对所有的路由使用相同的过渡。当想让每个路由的组件有不同的过渡,你可以将元信息meta和动态的 name 结合在一起,放在<transition> 上:

// App.vue  *********重点在这**********
<template>
  <div>
    <router-view #default="{route , Component }">                   
      <transition  :name="route.meta.transition">             <!--  name 为 路由动态配置的过渡效果名  -->
        <component :is="Component" />                       
      </transition>
    </router-view>
  </div>
</template>
​
<script setup lang="ts">
​
</script>
​
<style scoped>
div {
  width: 100%;
  height: 100%
}
.fade-enter-active, .fade-leave-active {           /*  fade-enter-active:进入动画的生效状态       fade-leave-active:离开动画的生效状态。*/
  transition: opacity .5s;  
}  
.fade-enter-to, .fade-leave-to {                       /*   fade-enter-to:进入动画的结束状态   fade-leave-to离开动画的结束状态 */
  opacity: 0;  
} 
</style>
​
// router/index.ts
import About from '@/views/about/index.vue'
import path from 'path';
import { createRouter, createWebHistory, RouteRecordRaw } from "vue-router";
// 1、定义路由 每个路由都需要映射到一个组件。
const routes: Array<RouteRecordRaw> = [
    // 可直接导入或者引入
    {
        path: '/',
        component: () => import("@/views/login/index.vue")
    },
    {
        path: '/home',
        component: () => import("@/views/home/index.vue"),
           meta:{
       //************* 如果你想让每个路由的组件有不同的过渡,你可以将元信息和动态的 name 结合在一起,放在<transition> 上 ,配置为fade
            transition: 'fade'                       
        }
    }
]
​
​
// 2、创建路由实例并传递routes
const router = createRouter({
    history: createWebHistory(),
    routes
})
​
const whileList = ['/']
router.beforeEach((to, form, next) => {
    if ((whileList.includes(to.path) || localStorage.getItem('token')) ) {
        next()
    } else {
        next('/')
    }
})
// 导出
export default router
​

1714984345621.jpg