首页 > 其他分享 >js 手写防抖

js 手写防抖

时间:2022-11-30 15:22:49浏览次数:30  
标签:function 防抖 js 点击 timeout 手写 执行 wait

使用场景:

多次操作只执行第一次操作。

可以用于用户点击按钮事件防抖操作。

多次操作只执行最后一次操作。

 可以搜索输入框,输入多个字符进行搜索,当输入停止之后进行搜索操作者。

方法如下:

   /**
   * 防抖
   * @param {function} fn 执行函数
   * @param {number} wait 等待时间,毫秒
   * @param {boolean} immediate 是否立即执行
   */
  debounce: function (fn, wait, immediate) {
    let timeout; // 局部全局变量
    return function (...args) {
      let context = this;
      if (timeout) clearTimeout(timeout); // 清除计时器,但是timeout本身还在,只是不会在执行
 
      if (immediate) { // 总是执行第一次操作
        let callNow = !timeout; // 第一次为true
        // 多次操作,timeout初始化,多次触发只有当wait等待时间结束timeout才为空
        timeout = setTimeout(function () {
          timeout = null;
        }, wait);
        // 第一次为true, 执行
        if (callNow) fn.apply(context, args);
      } else { // 总是执行最后一次操作
        timeout = setTimeout(function () {
          fn.apply(context, args);
        }, wait);
      }
    };
  },

使用

    /**
     * 多次点击事件,只执行第一次点击事件
     */
    const entryClick = debounce(
      function () {
        console.log("多次点击事件,只执行第一次点击事件");
      }, 500, true)

    /**
     * 输入多个字符,字符变化事件,只执行最后一次搜索
     */
    const entryClick = debounce(
      function () {
        console.log("多次点击事件,只执行第一次点击事件");
      }, 500)

标签:function,防抖,js,点击,timeout,手写,执行,wait
From: https://www.cnblogs.com/ygsrjr/p/16938505.html

相关文章