12345678910111213141516171819202122232425262728293031323334353637383940 |
- 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 };
|