防抖 节流

113 阅读1分钟

防抖

    /* 
      1 当我输入完毕了, 你再去发送请求!! 
      2 如何判断输入完毕
        1 如果你输入了文字 过了 2s中,都没有新的输入 我就认为 你输入完毕了 

      3 延时器 


      4 过程
        1 每一次按下按键
          1 清除上一个延时器
          2 开启新的延时器 

        2 例如
          1 按下 按键  "A"
          2 开启一个延时器  => "A" 发送给后端

          3 按下 按键  "AB"
          4  先清空上一个 延时器 “A”
          5  开启一个延时器  => "AB" 发送给后端

          6 按下 按键  "ABC"
          7 先清空上一个 延时器 “AB”
          8 开启一个延时器  => "ABC" 发送给后端

       */

      const input = document.querySelector('input');

      let timeId;
      input.addEventListener('input', function () {
        clearTimeout(timeId);
        timeId = setTimeout(function () {
          // 正常业务
          console.log('发送请求出去');
          // 正常业务
        }, 2000);
      });

节流

 <button>发送验证码</button>
    <script>
        /* 
        1 点击按钮的时候
          判断 是否允许执行业务 条件
        2 满足条件  允许执行
        3 不满足条件  不允许执行 
        4 延时器时间到了, 重新允许执行 
        
         */
        const button = document.querySelector('button');
        button.addEventListener('click', function () {
            button.disabled = true; // 禁用按钮
            // console.log('发送一次验证码');
            let times = 3;
            let timeId = setInterval(() => {
                times--;
                console.log(times);
                if (times === 0) {
                    clearInterval(timeId);
                    button.disabled = false;
                }
            }, 1000);
        });
    </script>