单位时间执行一次并在最后执行一次方法

杜柯枫 / 2023-08-02 / 原文

常用于页面缩放、滚动事件、鼠标移动事件节流处理

const delayFnO: { [x: string]: any } = {};
function delayTimeOut(key: string, time: number) {
  if (!time) return;
  setTimeout(() => {
    if (delayFnO[key]) delayFnO[key]();
    if (delayFnO[key]) {
      delete delayFnO[key];
      delayTimeOut(key, time);
    }
  }, time);
  delayFnO[key] = () => {
    delete delayFnO[key];
  };
}
export function delayFn(key: string, fn: any, time = 200) {
  if (delayFnO[key]) {
    delayFnO[key] = fn;
    return;
  }
  delayTimeOut(key, time);
  fn();
}