美文网首页
防抖&节流

防抖&节流

作者: Angel_6c4e | 来源:发表于2021-03-25 15:06 被阅读0次

    防抖:让触发的多次事件只执行一次。
    使用场景:搜索框

    //防抖
    function debounce (fn,delay) {
      let timer = null;
      return function () {
        let context = this;
        let args = arguments;
        clearTimeout(timer);
        timer = setTimeout(funcion () {
          fn.apply(context,args);
        },delay)
      }
     }
    
    //改良版:
    function debounce (fn,delay) {
      let timer = null;
      return function () {
        let context = this;
        let args = arguments;
        let firstTime = !timer;
        if(timer) {
          clearTimeout(timer);
        }
        if(firstTime) {
          fn.apply(constext,args);
        }
        timer = setTimeout(function () {
          timer = null;
        },delay) 
      }
    }
    

    节流:让触发的多次事件每隔一段时间执行一次。
    适用场景:拖拽事件(dom拖拽或滚动条),缩放窗口大小,动画场景(避免短时间内多次触发动画引起性能问题)

    //防抖:时间戳版本
    function throttle (fn,delay) {
      let preTime = 0;
      return function () {
        let context = this;
        let args = arguments;
        let curTime = new Date().getTime();
        if(curTime - perTime >= delay) {
          fn.apply(context,args);
          preTime = curTime;
        }
      }
    }
    
    //定时器版本
    function throttle (fn,delay) {
      let timer = null;
      return funcion () {
        let firstTime = !timer;
        if(firstTime) {
          timer = setTimeout(() => {
            fn.apply(this,arguments);
            clearTimeout(timer);
             timer = null;
          },delay)
        }
      }
    }
    

    相关文章

      网友评论

          本文标题:防抖&节流

          本文链接:https://www.haomeiwen.com/subject/clkocltx.html