节流&防抖

函数防抖(debounce)

在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。

function debounce(fn, delay) {
  let timer = null;

  return function() {
    if (timer) clearTimeout(timer);

    timer = setTimeout(() => {
      fn.apply(this, arguments);
    }, delay);
  };
}

函数节流(throttle)

规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。

drag(拖动)事件或者 scroll(滚动) 期间触发某个毁掉,要设置一个时间间隔。这时候就不能使用防抖了,为什么呢?
防抖是拖拽或者滚动结束之后才返回回调,但是我是需要在过程中进行触发回调,但是又不需要那么的频繁;这时候就使用节流函数,每隔一定的时间进项触发就好了!

function throttle(fn, delay) {
  let timer = null;

  return function() {
    if (!timer) {
      timer = setTimeout(() => {
        fn.apply(this, arguments);

        timer = null; // 执行完成后,重置为 null,以便下次触发事件时,再次执行函数。
      }, delay);
    }
  };
}

总结

  • 函数防抖和函数节流都是防止某一时间频繁触发,但是它们之间的原理却不一样。
  • 函数防抖是某一段时间内只执行一次,而函数节流是间隔时间执行。

结合应用场景

  • debounce防抖
    • 一个搜索输入框,用户不停的进行输入(这个时候就是抖动的过程),等用户输入停止之后,再触发搜索。
    • window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次。
  • throttle节流
    • 鼠标不断点击触发,mousedown(单位时间内只触发一次)。
    • 监听滚动事件,比如是否滑到底部自动加载更多,用throttle来判断。
posted @   strongerPian  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
返回顶端
点击右上角即可分享
微信分享提示