函数防抖和函数节流

前言

网上关于防抖节流的文章很多,其中不乏有各位大佬的各种姿势的深入理解,需要自己有一定的基础方可学得轻松一些。对于初次接触或迫切需要此功能的人员来说,可能一段直接复制即可使用的代码就能满足其初体验, 用的多了再看下大佬的文章自然也就懂了。
 

正文

一.函数节流

    思路整理:给一个事件锁  =》关闭锁   =》事件结束后解开锁

     平时可能日用而不知,实际的实现过程就这三步,  

<body>
    <input type="text" id="dev" />


    <script>
      let dev = document.querySelector('#dev')
      dev.addEventListener('keyup', function () {
        throttle();
      })

      let throttle_lock = true;    //事件锁
      function throttle() {
        if (throttle_lock) {        
          throttle_lock = false;    //进入事件立马关闭throttle_lock 
          setTimeout(() => {
            console.log('执行事件1')   //我一般在这里放需要防止重复提交的接口请求

            throttle_lock = true;    //定时器任务执行完毕后解开throttle_lock 
          }, 2000)
        }
      }
    </script>
</body>

一顿输入,浏览器控制台显示的输出次数和setTimeout设置的时间可以对上,就说明事件节流成功了(2s内只执行一次事件

一.函数防抖

思路整理:给一个空定时器  =》清除它   =》创建它后再执行事件

<body>
    <input type="text" id="dev" />


    <script>
      let dev = document.querySelector('#dev')
      dev.addEventListener('keyup', function () {
        debounce();
      })

      let timer = null;        //空的定时器
      function debounce() {
        if (timer) {
          clearTimeout(timer);  //触发事件立马清除定时器
        }
        timer = setTimeout(() => {    //创建一个定时器,

          console.log('执行事件2');    //这里可以放实时搜索这类的请求
        }, 2000)
      }
    </script>
</body>

2s内不管触发多少次,都以最后一次触发为准开始记时

个人总结:
        共通点:都是为防止某个事件短时间内触发的频率过高

        节流:可以这么理解,一把加特林机枪只有一发子弹,而且2s后队友才会给你新的弹夹,你2s内手速在快也只能造成一发子弹的伤害

        防抖:一个技能的读条时间需2s,再次点击会中断施法并重新开始读条

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值