瀏覽代碼

feat: 路由动画(每个路由都可添加不同动画)

xiaoxian521 3 年之前
父節點
當前提交
b1702ed7fe
共有 2 個文件被更改,包括 32 次插入3 次删除
  1. 25 2
      src/layout/components/appMain.vue
  2. 7 1
      src/router/modules/components.ts

+ 25 - 2
src/layout/components/appMain.vue

@@ -1,17 +1,40 @@
 <script setup lang="ts">
-import { ref, getCurrentInstance } from "vue";
+import { ref, computed, getCurrentInstance } from "vue";
 import { usePermissionStoreHook } from "/@/store/modules/permission";
 
 const keepAlive: Boolean = ref(
   getCurrentInstance().appContext.config.globalProperties.$config?.KeepAlive
 );
+
+const transition = computed(() => {
+  return route => {
+    return route.meta.transition;
+  };
+});
 </script>
 
 <template>
   <section class="app-main">
     <router-view>
       <template #default="{ Component, route }">
-        <transition appear name="fade-transform" mode="out-in">
+        <transition
+          :name="
+            transition(route) && route.meta.transition.enterTransition
+              ? 'pure-classes-transition'
+              : (transition(route) && route.meta.transition.name) ||
+                'fade-transform'
+          "
+          :enter-active-class="
+            transition(route) &&
+            `animate__animated ${route.meta.transition.enterTransition}`
+          "
+          :leave-active-class="
+            transition(route) &&
+            `animate__animated ${route.meta.transition.leaveTransition}`
+          "
+          mode="out-in"
+          appear
+        >
           <keep-alive
             v-if="keepAlive"
             :include="usePermissionStoreHook().cachePageList"

+ 7 - 1
src/router/modules/components.ts

@@ -20,7 +20,6 @@ const componentsRouter = {
       meta: {
         title: "message.hsvideo",
         showLink: true,
-        keepAlive: true,
         savedPosition: true
       }
     },
@@ -32,6 +31,9 @@ const componentsRouter = {
         title: "message.hsmap",
         showLink: true,
         keepAlive: true,
+        transition: {
+          name: "fade"
+        },
         savedPosition: true
       }
     },
@@ -42,6 +44,10 @@ const componentsRouter = {
       meta: {
         title: "message.hsdraggable",
         showLink: true,
+        transition: {
+          enterTransition: "animate__zoomIn",
+          leaveTransition: "animate__zoomOut"
+        },
         savedPosition: true
       }
     },