Vben
2021-02-26 fcee7d4eb71471dd40567c8d7c97302eeee80697
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
import { useDebounce } from '/@/hooks/core/useDebounce';
import { addResizeListener, removeResizeListener } from '/@/utils/event';
 
interface WindowSizeOptions {
  once?: boolean;
  immediate?: boolean;
}
 
export function useElResize<T>(
  el: Element | typeof window,
  fn: Fn<T>,
  wait = 100,
  options?: WindowSizeOptions
) {
  let handler = () => {
    fn();
  };
  const [handleSize, cancel] = useDebounce(handler, wait, options);
  handler = wait ? handleSize : handler;
 
  function start() {
    addResizeListener(el, handler);
  }
  function stop() {
    removeResizeListener(el, handler);
    cancel();
  }
 
  return [start, stop];
}