手写节流函数

节流在触发后,在该时间段内无论触发多少次都无效,只有过了这段时间才能继续触发,类似于王者的技能冷却

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <button id="btn">+1</button>
  <script>
    // 默认是立即执行
    function throttle(fn, interval, immediate = true) {
      // 1.定义变量保记录开始时间
      let startTime = 0


      const _throttle = function (...args) {
        // 2. 获取当前时间
        const nowTime = new Date().getTime()


        if (!immediate && startTime === 0) {
          startTime = nowTime
        }
        // 3.计算需要等待的时间
        const waitTime = interval - (nowTime - startTime)

        // 4.当等待的时间小于等于0时, 执行回调函数 
        if (waitTime <= 0) {
          fn.apply(this, args)
          // 并让开始时间等于现在时间 
          startTime = nowTime
        }
      }

      return _throttle
    }


    let counter = 0
    const btn = document.querySelector('#btn')
    function add() {
      console.log(`打印了${++counter}次`, this)
    }

    btn.onclick = throttle(add, 2000)


  </script>
</body>

</html>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值