feat: add transition effects for page and dropdown

- Add page transition CSS with opacity and blur effects

- Wrap dropdown in Transition component with slide effect

- Configure Nuxt pageTransition in config
This commit is contained in:
immortal521
2025-08-16 01:22:56 +08:00
parent 2e749a5672
commit f5557cbf08
3 changed files with 34 additions and 10 deletions

View File

@@ -75,6 +75,17 @@ const goToNewPost = () => {
<style src="~/assets/global.css"></style> <style src="~/assets/global.css"></style>
<style> <style>
/* 页面过渡效果 */
.page-enter-active,
.page-leave-active {
transition: all 0.4s;
}
.page-enter-from,
.page-leave-to {
opacity: 0;
filter: blur(10px);
}
.header-container { .header-container {
position: fixed; position: fixed;
top: 0; top: 0;

View File

@@ -3,17 +3,19 @@
<div class="dropdown-trigger" @click="toggle"> <div class="dropdown-trigger" @click="toggle">
<slot name="trigger"></slot> <slot name="trigger"></slot>
</div> </div>
<div v-if="visible" class="dropdown-menu-container"> <Transition name="dropdown-menu">
<div <div v-if="visible" class="dropdown-menu-container">
v-for="(item, idx) in items" <div
:key="idx" v-for="(item, idx) in items"
class="dropdown-item" :key="idx"
:style="{ color: item.color || 'inherit' }" class="dropdown-item"
@click="handle(item)" :style="{ color: item.color || 'inherit' }"
> @click="handle(item)"
{{ item.text }} >
{{ item.text }}
</div>
</div> </div>
</div> </Transition>
</div> </div>
</template> </template>
@@ -67,6 +69,16 @@ export default {
align-items: center; align-items: center;
} }
.dropdown-menu-enter-active,
.dropdown-menu-leave-active {
transition: all 0.4s;
}
.dropdown-menu-enter-from,
.dropdown-menu-leave-to {
opacity: 0;
transform: translateY(-16px);
}
.dropdown-menu-container { .dropdown-menu-container {
position: absolute; position: absolute;
top: 100%; top: 100%;

View File

@@ -15,6 +15,7 @@ export default defineNuxtConfig({
// 确保 Vditor 样式在 global.css 覆盖前加载 // 确保 Vditor 样式在 global.css 覆盖前加载
css: ['vditor/dist/index.css', '~/assets/fonts.css', '~/assets/global.css'], css: ['vditor/dist/index.css', '~/assets/fonts.css', '~/assets/global.css'],
app: { app: {
pageTransition: { name: 'page', mode: 'out-in' },
head: { head: {
script: [ script: [
{ {