Skip to content

Commit 87f5b60

Browse files
committed
refactor: 调整动效
1 parent 6d58f1c commit 87f5b60

File tree

3 files changed

+47
-32
lines changed

3 files changed

+47
-32
lines changed

src/layouts/components/SubSidebar/index.vue

Lines changed: 43 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -43,38 +43,40 @@ watch(() => menuStore.actived, (val, oldVal) => {
4343
</script>
4444

4545
<template>
46-
<div
47-
v-if="enableSidebar" class="sub-sidebar-container" :class="{
48-
'is-collapse': settingsStore.mode === 'pc' && settingsStore.settings.menu.subMenuCollapse,
49-
}"
50-
>
51-
<component :is="useSlots('sub-sidebar-top')" />
52-
<Logo
53-
v-if="['side', 'single'].includes(settingsStore.settings.menu.mode)" :show-logo="settingsStore.settings.menu.mode === 'single'" class="sidebar-logo" :class="{
54-
single: settingsStore.settings.menu.mode === 'single',
46+
<Transition name="sub-sidebar">
47+
<div
48+
v-if="enableSidebar" class="sub-sidebar-container" :class="{
49+
'is-collapse': settingsStore.mode === 'pc' && settingsStore.settings.menu.subMenuCollapse,
5550
}"
56-
/>
57-
<component :is="useSlots('sub-sidebar-after-logo')" />
58-
<FaScrollArea :scrollbar="false" mask gradient-color="var(--g-sub-sidebar-bg)" class="flex-1">
59-
<TransitionGroup :name="transitionName">
60-
<template v-for="(mainItem, mainIndex) in menuStore.allMenus" :key="mainIndex">
61-
<div v-show="mainIndex === menuStore.actived">
62-
<Menu
63-
:menu="mainItem.children" :value="route.meta.activeMenu || route.path" :default-openeds="menuStore.defaultOpenedPaths" :accordion="settingsStore.settings.menu.subMenuUniqueOpened" :collapse="settingsStore.mode === 'pc' && settingsStore.settings.menu.subMenuCollapse" class="menu" :class="{
64-
'-mt-2': !['head', 'single'].includes(settingsStore.settings.menu.mode),
65-
}"
66-
/>
67-
</div>
68-
</template>
69-
</TransitionGroup>
70-
</FaScrollArea>
71-
<div v-if="settingsStore.mode === 'pc'" class="relative flex items-center px-4 py-3" :class="[settingsStore.settings.menu.subMenuCollapse ? 'justify-center' : 'justify-end']">
72-
<FaButton v-show="settingsStore.settings.menu.enableSubMenuCollapseButton" variant="secondary" size="icon" class="h-8 w-8 transition" :class="{ '-rotate-z-180': settingsStore.settings.menu.subMenuCollapse }" @click="settingsStore.toggleSidebarCollapse()">
73-
<FaIcon name="toolbar-collapse" class="size-4" />
74-
</FaButton>
51+
>
52+
<component :is="useSlots('sub-sidebar-top')" />
53+
<Logo
54+
v-if="['side', 'single'].includes(settingsStore.settings.menu.mode)" :show-logo="settingsStore.settings.menu.mode === 'single'" class="sidebar-logo" :class="{
55+
single: settingsStore.settings.menu.mode === 'single',
56+
}"
57+
/>
58+
<component :is="useSlots('sub-sidebar-after-logo')" />
59+
<FaScrollArea :scrollbar="false" mask gradient-color="var(--g-sub-sidebar-bg)" class="flex-1">
60+
<TransitionGroup :name="transitionName">
61+
<template v-for="(mainItem, mainIndex) in menuStore.allMenus" :key="mainIndex">
62+
<div v-show="mainIndex === menuStore.actived">
63+
<Menu
64+
:menu="mainItem.children" :value="route.meta.activeMenu || route.path" :default-openeds="menuStore.defaultOpenedPaths" :accordion="settingsStore.settings.menu.subMenuUniqueOpened" :collapse="settingsStore.mode === 'pc' && settingsStore.settings.menu.subMenuCollapse" class="menu" :class="{
65+
'-mt-2': !['head', 'single'].includes(settingsStore.settings.menu.mode),
66+
}"
67+
/>
68+
</div>
69+
</template>
70+
</TransitionGroup>
71+
</FaScrollArea>
72+
<div v-if="settingsStore.mode === 'pc'" class="relative flex items-center px-4 py-3" :class="[settingsStore.settings.menu.subMenuCollapse ? 'justify-center' : 'justify-end']">
73+
<FaButton v-show="settingsStore.settings.menu.enableSubMenuCollapseButton" variant="secondary" size="icon" class="h-8 w-8 transition" :class="{ '-rotate-z-180': settingsStore.settings.menu.subMenuCollapse }" @click="settingsStore.toggleSidebarCollapse()">
74+
<FaIcon name="toolbar-collapse" class="size-4" />
75+
</FaButton>
76+
</div>
77+
<component :is="useSlots('sub-sidebar-bottom')" />
7578
</div>
76-
<component :is="useSlots('sub-sidebar-bottom')" />
77-
</div>
79+
</Transition>
7880
</template>
7981

8082
<style scoped>
@@ -147,4 +149,15 @@ watch(() => menuStore.actived, (val, oldVal) => {
147149
.sub-sidebar-y-end-leave-active {
148150
position: absolute;
149151
}
152+
153+
/* 次侧边栏动画 */
154+
.sub-sidebar-enter-active,
155+
.sub-sidebar-leave-active {
156+
transition: 0.3s;
157+
}
158+
159+
.sub-sidebar-enter-from,
160+
.sub-sidebar-leave-to {
161+
transform: translateX(calc(var(--g-sub-sidebar-width) * -1));
162+
}
150163
</style>

src/layouts/index.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,9 @@ const enableAppSetting = import.meta.env.VITE_APP_SETTING
185185
transition: width 0.3s, transform 0.3s, box-shadow 0.3s, top 0.3s;
186186
187187
&:has(> .main-sidebar-container.main-sidebar-enter-active),
188-
&:has(> .main-sidebar-container.main-sidebar-leave-active) {
188+
&:has(> .main-sidebar-container.main-sidebar-leave-active),
189+
&:has(> .sub-sidebar-container.sub-sidebar-enter-active),
190+
&:has(> .sub-sidebar-container.sub-sidebar-leave-active) {
189191
overflow: hidden;
190192
}
191193
}

src/ui/components/FaSmartFixedBlock/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ defineProps<{
2222
width: calc(100% - var(--g-main-sidebar-actual-width) - var(--g-sub-sidebar-actual-width));
2323
padding-right: var(--scrollbar-width, 0);
2424
transform: translateX(-50%) translateX(calc(var(--g-main-sidebar-actual-width) / 2)) translateX(calc(var(--g-sub-sidebar-actual-width) / 2));
25-
transition: width 0.3s, max-width 0.3s, transform 0.3s;
25+
transition: width 0.3s, max-width 0.3s, transform 0.3s, top 0.3s;
2626
2727
&.top {
2828
top: var(--g-header-actual-height);

0 commit comments

Comments
 (0)