Skip to content
On this page

防抖节流

实现思路:

  • 定义一个定时器。
  • 当事件被触发时,如果定时器已存在,则清除它。
  • 重新设置定时器,延迟执行回调函数。

防抖

防抖技术的基本思想是:在事件被触发 n 秒后再执行回调,如果在这 n 秒内又被触发,则重新计时。这适用于那些需要等待用户停止操作后才执行的场景,比如搜索框的搜索提示、输入框的验证等。

实现思路:

  • 定义一个定时器。
  • 当事件被触发时,如果定时器已存在,则清除它。
  • 重新设置定时器,延迟执行回调函数。

代码实现:

js
function debounce(func, wait) {
    let timeout;
    return function () {
        const context = this,
            args = arguments;
        clearTimeout(timeout);
        timeout = setTimeout(() => {
            func.apply(context, args);
        }, wait);
    };
}

节流

节流技术的基本思想是:规定在单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次能生效。这适用于那些需要控制执行频率的场景,比如滚动加载图片、自动完成等。

实现思路:

  • 记录上一次执行的时间。
  • 当事件被触发时,比较当前时间和上一次执行时间的差是否达到了指定的时间间隔。
  • 如果达到了,则执行函数,并更新上一次执行时间。

代码实现:

js
function throttle(func, limit) {
    let flag;
    return function () {
        const args = arguments;
        const context = this;
        if (!flag) {
            func.apply(context, args);
            flag = true;
            setTimeout(() => (flag = false), limit);
        }
    };
}