js中防抖节流


防抖: 事件在n秒后执行,如果在n秒内被再次出发,会重新计算时间,直到n 秒后才执行。简单点就是一个事件,一个事件在n秒内被再次触发,事件不会执行,只有过了n秒才执行

  • 防抖应用:scroll滚动事件的出发;
  • 网络请求一些应用;
  • 表单验证
  • 按钮提交事件
  • 浏览器窗口缩放
  • 搜索框输入

还是看代码吧



  
    
    
    Document
    
  
  
    

当鼠标在这个盒子移动会频繁出发这个事件,影响性能,



  
    
    
    Document
    
  
  
    

 2节流: 如果你持续触发事件,每隔一段时间,只执行一次事件。



  
    
    
    Document
    
  
  
    

// 2、防抖功能函数,接受传参
    function debounce(fn) {
      // 4、创建一个标记用来存放定时器的返回值
      let timeout = null;
      return function() {
        // 5、每次当用户点击/输入的时候,把前一个定时器清除
        clearTimeout(timeout);
        // 6、然后创建一个新的 setTimeout,
        // 这样就能保证点击按钮后的 interval 间隔内
        // 如果用户还点击了的话,就不会执行 fn 函数
        timeout = setTimeout(() => {
          fn.call(this, arguments);
        }, 1000);
      };
    }

引用:https://juejin.im/post/5c87b54ce51d455f7943dddb#heading-3