🔴🔵防抖和节流的实现+使用场景⚡⚡⚡

image

防抖(debounce):事件连续触发时,只执行「最后一次」触发后的回调,如果在这个时间段内又触发了事件,则会重新开始延时。
 比喻:公交车等人,只要还有人不断上车就不发车,等没人上来后 一段时间 才真正发车。

 适用场景:
 *    - 搜索框输入联想(连续打字只发一次请求)
 *    - 窗口 resize / 滚动 结束后再计算
 *    - 表单按钮防重复提交

 //* func      需要防抖的函数
// * wait      防抖等待时间(毫秒)
 //*  immediate 是否立即执行(可选,默认 false)

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

 节流(throttle):件连续触发时,保证回调在 wait 毫秒内「最多执行一次」保证一定时间段内只触发一次事件处理函数。
 * 比喻:水龙头滴水,无论水开多大,都按固定间隔一滴一滴地流

适用场景:
 *    - 滚动加载更多 / 滚动时更新位置
 *    - 拖拽、鼠标移动等高频率事件
 *    - 游戏中的高频更新逻辑

 

// 节流函数
function throttle(func, wait) {
  let timeout;
  return function() {
    const context = this;
    const args = arguments;
    if (!timeout) {
      timeout = setTimeout(function() {
        timeout = null;
        func.apply(context, args);
      }, wait);
    }
  };
}

 

posted @ 2022-10-06 15:50  Mahmud*小麦*  阅读(160)  评论(0)    收藏  举报