From af270b3d6a4e6d2af570b180c2726875c37116c8 Mon Sep 17 00:00:00 2001 From: gushen610140 Date: Thu, 26 Feb 2026 22:23:54 +0800 Subject: [PATCH] feat: optimize header and footer --- components.d.ts | 4 ++ docs/cli-feature/scroll.md | 13 ++++ src/App.vue | 6 +- .../button/ChangeLanguageDropdownButton.vue | 11 ++-- .../button/ChangeThemeDropdownButton.vue | 25 +++++--- src/components/button/UserAuthNavButton.vue | 5 +- src/components/icon/RedBookIcon.vue | 19 ------ src/components/layout/FooterBarV2.vue | 6 +- src/components/menu/NavBar.vue | 61 +++++++++---------- src/i18n/en_US.ts | 2 + src/i18n/index.ts | 2 + src/i18n/zh_CN.ts | 2 + src/pages/demo.vue | 20 ++++++ src/pages/index.vue | 6 +- src/pages/join.vue | 20 ++++++ 15 files changed, 126 insertions(+), 76 deletions(-) create mode 100644 docs/cli-feature/scroll.md create mode 100644 src/pages/demo.vue create mode 100644 src/pages/join.vue diff --git a/components.d.ts b/components.d.ts index 5b3568c..718bd3b 100644 --- a/components.d.ts +++ b/components.d.ts @@ -40,6 +40,8 @@ declare module 'vue' { ElButton: typeof import('element-plus/es')['ElButton'] FooterBar: typeof import('./src/components/layout/FooterBar.vue')['default'] FooterBarV2: typeof import('./src/components/layout/FooterBarV2.vue')['default'] + FooterBarV2Placeholder: typeof import('./src/components/layout/FooterBarV2Placeholder.vue')['default'] + FooterBarV2Space: typeof import('./src/components/layout/FooterBarV2Space.vue')['default'] LogoIcon: typeof import('./src/components/icon/LogoIcon.vue')['default'] NativeSelect: typeof import('./src/components/ui/native-select/NativeSelect.vue')['default'] NativeSelectOptGroup: typeof import('./src/components/ui/native-select/NativeSelectOptGroup.vue')['default'] @@ -86,6 +88,8 @@ declare global { const ElButton: typeof import('element-plus/es')['ElButton'] const FooterBar: typeof import('./src/components/layout/FooterBar.vue')['default'] const FooterBarV2: typeof import('./src/components/layout/FooterBarV2.vue')['default'] + const FooterBarV2Placeholder: typeof import('./src/components/layout/FooterBarV2Placeholder.vue')['default'] + const FooterBarV2Space: typeof import('./src/components/layout/FooterBarV2Space.vue')['default'] const LogoIcon: typeof import('./src/components/icon/LogoIcon.vue')['default'] const NativeSelect: typeof import('./src/components/ui/native-select/NativeSelect.vue')['default'] const NativeSelectOptGroup: typeof import('./src/components/ui/native-select/NativeSelectOptGroup.vue')['default'] diff --git a/docs/cli-feature/scroll.md b/docs/cli-feature/scroll.md new file mode 100644 index 0000000..160ffdb --- /dev/null +++ b/docs/cli-feature/scroll.md @@ -0,0 +1,13 @@ +# 滚动 + +## 平滑滚动 + +Hucky 选择了 [Lenis](https://lenis.darkroom.engineering/) 为项目提供平滑滚动,您可以在 `App.vue` 中控制平滑滚动的开关。 + +## 滚动失效 + +如果您遇到了滚动失效的情况,这是因为 Lenis 和普通滚动冲突,您可以通过添加 `data-lenis-prevent` 属性来防止 lenis 平滑滚动。例如: + +```html +
+``` diff --git a/src/App.vue b/src/App.vue index 28dc5e9..6f79f0c 100644 --- a/src/App.vue +++ b/src/App.vue @@ -4,7 +4,11 @@ import { useLanguageStore } from "./stores/LanguageStore"; import Lenis from "lenis"; // 开启 lenis 平滑滚动 -const lenis = new Lenis(); +const lenis = new Lenis({ + // 通过添加 data-lenis-prevent 属性来防止 lenis 平滑滚动 + prevent: (node) => + node.tagName === "SELECT" || node.hasAttribute("data-lenis-prevent"), +}); function raf(time) { lenis.raf(time); diff --git a/src/components/button/ChangeLanguageDropdownButton.vue b/src/components/button/ChangeLanguageDropdownButton.vue index 7fdd723..8c662b0 100644 --- a/src/components/button/ChangeLanguageDropdownButton.vue +++ b/src/components/button/ChangeLanguageDropdownButton.vue @@ -33,13 +33,10 @@ const onClickChangeLocal = (newLanguage: string) => { d="M12 21a9 9 0 1 0 0-18m0 18a9 9 0 1 1 0-18m0 18c2.761 0 3.941-5.163 3.941-9S14.761 3 12 3m0 18c-2.761 0-3.941-5.163-3.941-9S9.239 3 12 3M3.5 9h17m-17 6h17" /> - + {{ t("nav.locale") }} +
import { useGlobalThemeHook } from "@/hooks/globalThemeHook"; import { useI18n } from "vue-i18n"; +import Lenis from "lenis"; + +// 开启 lenis 平滑滚动 +const lenis = new Lenis(); + +function raf(time) { + lenis.raf(time); + requestAnimationFrame(raf); +} + +requestAnimationFrame(raf); const { t } = useI18n(); @@ -20,17 +31,13 @@ const { changeGlobalTheme, curGlobalTheme, optionalThemes } =
- + {{ t("nav.theme") }} +