防抖和节流

Posted pingzi-wq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了防抖和节流相关的知识,希望对你有一定的参考价值。

一、概念

  1. 防抖
    • 把多个顺序的调用合并成一次,也就是在一定的时间内,规定事件被触发的次数
    • 如何实现
      // 简单的防抖函数
      function debounce(func, wait){
          var timeout;
          return function() {
              clearTimeout(timeout);      // 清除计时器
              timeout = setTimeout(func, wait);
          };
      };
      
      // 实际想要请求的函数
      function realFun(){
          console.log(success);
      }
      
      // 采用防抖
      window.addEventListener(scroll, debounce(realFun, 500));
      
      // 没有采用防抖动
      window.addEventListener(scroll, realFunc);
        
  2. 节流
    • 为什么有了防抖还不满足,出了个节流呢?因为一般我们往下滑动的时候,不停的触发scroll事件,如果只有防抖函数,那么有可能会出现空白,因为会一直的清空计时器不会发生请求。所以,我们想要一边滑动,一边出现内容,并且不会出现浏览器掉帧,这就需要节流的存在了。
    • 什么是节流?节流与防抖相比,就是保证在一定时间内至少执行一次我们希望触发的事件。
    • 实现
      // 节流函数
      function throttle(func, wait, mustRun){
          var timeout, startTime = new Date();
          return function(){
              var context = this;        // 其实这里的this指的是window
              var curTime = new Date();
              clearTimeout(timeout);
              if(curTime - startTime >= mustRun){
                  func.apply(context);
                  startTime = curTime;
              }else {
                  timeout = setTimeout(func, wait);
              }
          };
      };
      
      // 要出发的事件handler
      function realFunc(){
          console.log(success);
      }
      
      // 采用节流函数
      window.addEventListener(scroll, throttle(realFunc, 500, 1000));

       

以上是关于防抖和节流的主要内容,如果未能解决你的问题,请参考以下文章

lodash的防抖和节流方法

JS基础-防抖和节流

防抖和节流代码实现

防抖和节流代码实现

JS的防抖和节流

防抖和节流啥区别,实现一个防抖和节流