1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| import { type AnyFunction } from '@vben/types';
| import { tryOnMounted, tryOnUnmounted, useDebounceFn } from '@vueuse/core';
|
| interface UseWindowSizeOptions {
| wait?: number;
| once?: boolean;
| immediate?: boolean;
| listenerOptions?: AddEventListenerOptions | boolean;
| }
|
| function useWindowSizeFn(fn: AnyFunction, options: UseWindowSizeOptions = {}) {
| const { wait = 150, immediate } = options;
| let handler = () => {
| fn();
| };
| const handleSize = useDebounceFn(handler, wait);
| handler = handleSize;
|
| const start = () => {
| if (immediate) {
| handler();
| }
| window.addEventListener('resize', handler);
| };
|
| const stop = () => {
| window.removeEventListener('resize', handler);
| };
|
| tryOnMounted(() => {
| start();
| });
|
| tryOnUnmounted(() => {
| stop();
| });
| return { start, stop };
| }
|
| export { useWindowSizeFn, type UseWindowSizeOptions };
|
|