From dcde015ded66e362597d3f1ae576bbb8e261bf64 Mon Sep 17 00:00:00 2001 From: sendevia Date: Sat, 6 Dec 2025 00:38:06 +0800 Subject: [PATCH] feat(screenWidth): add fallback check for initial screen width update --- .vitepress/theme/stores/screenWidth.ts | 28 +++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/.vitepress/theme/stores/screenWidth.ts b/.vitepress/theme/stores/screenWidth.ts index 4b4a47e..33703b1 100644 --- a/.vitepress/theme/stores/screenWidth.ts +++ b/.vitepress/theme/stores/screenWidth.ts @@ -12,6 +12,7 @@ export const useScreenWidthStore = defineStore("screenWidth", () => { // 内部状态 let resizeHandler: (() => void) | null = null; + let fallbackHandler: (() => void) | null = null; let isInitialized = false; /** @@ -24,6 +25,13 @@ export const useScreenWidthStore = defineStore("screenWidth", () => { } } + /** + * Fallback 检查 + */ + function runFallbackCheck() { + update(); + } + /** * 初始化监听器 */ @@ -32,6 +40,14 @@ export const useScreenWidthStore = defineStore("screenWidth", () => { update(); resizeHandler = () => update(); window.addEventListener("resize", resizeHandler); + + if (document.readyState === "complete") { + runFallbackCheck(); + } else { + fallbackHandler = () => runFallbackCheck(); + window.addEventListener("load", fallbackHandler); + } + isInitialized = true; } } @@ -40,9 +56,15 @@ export const useScreenWidthStore = defineStore("screenWidth", () => { * 清理监听器 */ function cleanup() { - if (typeof window !== "undefined" && resizeHandler) { - window.removeEventListener("resize", resizeHandler); - resizeHandler = null; + if (typeof window !== "undefined") { + if (resizeHandler) { + window.removeEventListener("resize", resizeHandler); + resizeHandler = null; + } + if (fallbackHandler) { + window.removeEventListener("load", fallbackHandler); + fallbackHandler = null; + } isInitialized = false; } }