节流和防抖及其应用场景...

函数防抖(debounce) :在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。 
 

function debounce(fn,delay) {
  let timer;
  const that = this;
 return function (){
        const _args = arguments;
      if (timer ){ clearTimeout(timer)}
       timer= setTimeout(function(){
          fn.apply(that,_args)
       },delay)

     }

}

我们加入了防抖以后,当你在频繁的触发函数时 ,在单位的时间间隔内, 取消原来的定时器,重新创建延迟触发.
防抖应用场景 :

  • search搜索联想,用户在不断输入值时,用防抖来节约请求资源。
  • window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次


函数防抖(debounce) :在单位时间内触发,只执行一次。


function throttle(fn,delay){
   let deferTimer , last;
    return function (args){
      const context = this;
      const now = new Date();
      const _args = arguments;
   if(last&&now{
       fn.apply(context,_args);
       last=now;
      clearTimeout(deferTimer)
     },last+delay-now);
   }
} else {
    fn.apply(context,_args);
    last=now;

}
    }

}

应用场景:
单位时间只触发一次,防止鼠标连续多次提交。
监听滚动页面,懒加载多张图片,用节流函数防止连续触发。

 

你可能感兴趣的:(js)