mirror of
https://github.com/sendevia/website.git
synced 2026-03-05 23:32:45 +08:00
feat(screenWidth): add fallback check for initial screen width update
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user