【前端工具类】002-监听窗口尺寸变化工具类:WindowSizeTracker
文章目录
- 【前端工具类】002-监听窗口尺寸变化工具类:WindowSizeTracker
- 一、ts 传统写法
-
- 二、Vue3 usexxx 写法
-
一、ts 传统写法
1、工具类
interface WindowSize {width: number;height: number;
}
type WindowSizeChangeListener = (size: WindowSize) => void;export class WindowSizeTracker {private listeners: WindowSizeChangeListener[] = [];private size: WindowSize = {width: window.innerWidth,height: window.innerHeight,};public addListener(listener: WindowSizeChangeListener): void {listener(this.size);this.listeners.push(listener);}public removeListener(listener: WindowSizeChangeListener): void {const index = this.listeners.indexOf(listener);if (index !== -1) {this.listeners.splice(index, 1);}}private notifyListeners(): void {this.listeners.forEach((listener) => {listener(this.size);});}private handleResize(): void {this.size = {width: window.innerWidth,height: window.innerHeight,};this.notifyListeners();}constructor() {window.addEventListener("resize", () => {this.handleResize();});}
}
2、使用示例
import {WindowSizeTracker} from "@/utils/WindowSizeTracker";const tracker = new WindowSizeTracker();tracker.addListener((size) => {console.log(`窗口尺寸已改变为:${size.width} x ${size.height}`);});tracker.removeListener((size) => {console.log(`窗口尺寸已改变为:${size.width} x ${size.height}`);});
二、Vue3 usexxx 写法
1、代码
import { ref, onMounted, onUnmounted } from 'vue';export function useWindowSize() {const width = ref(window.innerWidth);const height = ref(window.innerHeight);const handleResize = () => {width.value = window.innerWidth;height.value = window.innerHeight;};onMounted(() => {window.addEventListener('resize', handleResize);});onUnmounted(() => {window.removeEventListener('resize', handleResize);});return {width,height,};
}
2、使用示例
<script lang="ts" setup>
import { useWindowSize } from "@/utils/WindowSizeTracker";
import {watch} from "vue";const { width, height } = useWindowSize();
watch([width, height], ([width, height]) => {console.log(width, height);
});</script>