vitepress-theme-base-teek
Version:
28 lines (22 loc) • 852 B
text/typescript
import { onMounted, onUnmounted, ref } from "vue";
import { useDebounce } from "./useDebounce";
import { inBrowser } from "vitepress";
export const useWindowSize = (sizeChangeCallback?: (width: number, height: number) => void | undefined) => {
const width = ref(Number.POSITIVE_INFINITY);
const height = ref(Number.POSITIVE_INFINITY);
const updateSize = useDebounce(() => {
if (inBrowser) {
width.value = window.innerWidth;
height.value = window.innerHeight;
sizeChangeCallback?.(width.value, height.value);
}
}, 100);
onMounted(() => {
if (inBrowser) window.addEventListener("resize", updateSize, { passive: true });
});
onUnmounted(() => {
if (inBrowser) window.removeEventListener("resize", updateSize);
});
updateSize();
return { width, height, updateSize };
};