feat: 使用vue的transaction组件实现页面过渡动画

This commit is contained in:
hxr 2023-10-25 23:50:19 +08:00
parent cf427de12a
commit f4cba1a368
3 changed files with 94 additions and 6 deletions

View File

@ -6,12 +6,14 @@ const tagsViewStore = useTagsViewStore();
<template> <template>
<section class="app-main"> <section class="app-main">
<router-view v-slot="{ Component, route }"> <router-view>
<transition name="router-fade" mode="out-in"> <template #default="{ Component, route }">
<keep-alive :include="tagsViewStore.cachedViews"> <transition name="fade-slide" mode="out-in">
<component :is="Component" :key="route.fullPath" /> <keep-alive :include="tagsViewStore.cachedViews">
</keep-alive> <component :is="Component" :key="route.fullPath" />
</transition> </keep-alive>
</transition>
</template>
</router-view> </router-view>
</section> </section>
</template> </template>

View File

@ -1,3 +1,4 @@
@import "./transition";
@import "./sidebar"; @import "./sidebar";
@import "./reset"; @import "./reset";
@import "./dark"; @import "./dark";

View File

@ -0,0 +1,85 @@
// global transition css
/* fade */
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.28s;
}
.fade-enter,
.fade-leave-active {
opacity: 0;
}
/* fade-transform */
.fade-transform-leave-active,
.fade-transform-enter-active {
transition: all 0.5s;
}
.fade-transform-enter {
opacity: 0;
transform: translateX(-30px);
}
.fade-transform-leave-to {
opacity: 0;
transform: translateX(30px);
}
/* breadcrumb transition */
.breadcrumb-enter-active,
.breadcrumb-leave-active {
transition: all 0.5s;
}
.breadcrumb-enter,
.breadcrumb-leave-active {
opacity: 0;
transform: translateX(20px);
}
.breadcrumb-move {
transition: all 0.5s;
}
.breadcrumb-leave-active {
position: absolute;
}
/* 缩放过渡 */
.fade-scale-enter-active,
.fade-scale-leave-active {
transition: transform 0.3s ease-in-out;
}
.fade-scale-enter-from,
.fade-scale-leave-to {
transform: scale(0);
}
.fade-slide-leave-active,
.fade-slide-enter-active {
transition: opacity 0.3s, transform 0.3s;
}
.fade-slide-enter-from {
opacity: 0;
transform: translateX(-30px);
}
.fade-slide-leave-to {
opacity: 0;
transform: translateX(30px);
}
/* 旋转过渡 */
.fade-rotate-enter-active,
.fade-rotate-leave-active {
transition: transform 0.3s ease-in-out;
}
.fade-rotate-enter-from,
.fade-rotate-leave-to {
transform: rotate(90deg);
}