防抖和节流

防抖

用一句话来表述,只要用户没有停止当前行为,就不会处理事件。【比如只要用户鼠标还在滑动,就不会将每一次滑动事件都去执行。】

// 三个参数分别是 经过防抖处理的函数,延迟时间,是否立即执行,希望传递给 fn 的参数列表
let  debounce = function (fn, delay = 300, start = true, ...arg) {
    if (typeof fn !== "function") {
      return;
    }

    let timer = null;
    return function () {
      let that = this;
      clearTimeout(timer);
      timer = setTimeout(
        () => {
          fn.apply(that, [...arg]);
          start = false;
        },
        start ? 0 : delay
      );
    };
  };

节流

用一句话来表述,要求用户在指定的时间间隔执行 【比如鼠标滑动事件,我们并不需要处理每一次的鼠标滑动,一般每个几百毫秒处理一次】


  // 三个参数分别是 经过节流处理的函数,延迟时间,是否立即执行,希望传递给 fn 的参数列表
  let throttle = function (fn, delay = 300, start = true, ...arg) {
    if (typeof fn !== "function") {
      return;
    }

    let timer = 0;

    return function () {
      let that = this;
      if (timer) {
        return;
      }

      timer = setTimeout(
        () => {
          fn.apply(that, [...arg]);
          start = false;
          timer = false;
        },
        start ? 0 : delay
      );
    };
  };

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值