防抖

当事件被触发时,设定一个周期延迟执行动作,若期间又被触发,则重新设定周期,直到周期结束,执行动作

function debounce(func, delay) {
  let timer = null;
  return function (...arguments) {
    clearTimeout(timer);  //清除计时器
    timer = setTimeout(() => {  //重新记时
      func.apply(this, arguments);
    }, delay);
  };
}

 

节流

在固定周期内,只执行一次动作,若有新事件触发,不执行,周期结束后,又有事件触发,开始新的周期

function throttle(func, delay) {
  let flag = true;  //设置判断
  return function (...arguments) {
    if (!flag) {  //周期内直接返回
      return;  
    }
    flag = false;  //周期开始
    setTimeout(() => {
      func.apply(this, arguments);
      flag = true;  //周期结束,判断允许
    }, delay);
  };
}

 

posted on 2022-04-26 11:59  jzfan  阅读(27)  评论(0编辑  收藏  举报