节流 连续触发的事件每隔一段时间执行。
防抖 连续触发的事件只执行一次,事件停下一段时间后才能继续触发下一次。
使用场景:
- 节流: 可以将一些事件降低触发频率。比如懒加载时要监听计算滚动条的位置,但不必每次滑动都触发,可以降低计算的频率,而不必去浪费资源;另外还有做商品预览图的放大镜效果时,不必每次鼠标移动都计算位置。
- 防抖:一般可以使用在用户输入停止一段时间过后再去获取数据,而不是每次输入都去获取。
节流函数 定时函数版
function throttle(fn, delay) {
  let timer = null;
  return function(){
    if(timer) return
    setTimeout(()=>{
      fn.call(this, arguments);
      timer = null;
    }, delay)
  }
}
div.addEventListener('drag', throttle(function(e){console.log(e.offsetX)},200))防抖函数
- function debounce(fn,delay) {
-   let timer = null;
-   return function() {
-     if(timer) {
-        clearTimeout(timer);
-     }
-     setTimeout(()=>{
-      fn.call(this, arguments);
-       timer = null;
-     }, delay)
-   }
- } 
 京公网安备 11010502036488号
京公网安备 11010502036488号