js 防抖和节流

  let inp = document.getElementsByTagName('input')[0]
  inp.addEventListener('input', debounce(myFunction,1000), false)//防抖
  inp.addEventListener('input', throttle(myFunction, 1000), false)// 节流

function debounce(fn, delay) {
        var timer = null
        return function () {
          // 每当用户输入的时候把前一个 setTimeout clear 掉
          clearTimeout(timer)
          timer = setTimeout(() => {
            //  然后又创建一个新的 setTimeout, 这样就能保证interval 间隔内如果时间持续触发,就不会执行 fn 函数
            fn.call(this)
          }, delay)
        }
      }

// 节流(throttle)如果短时间内大量触发同一事件,那么在函数执行一次之后,该函数在指定的时间期限内不再工作,直至过了这段时间才重新生效,降低频率.
      // 1.利用setTimeout
      function throttle(fn, delay) {
        let valid = true
        return function () {
          if (!valid) {
            //休息时间 暂不接客
            return false
          }
          // 工作时间,执行函数并且在间隔期内把状态位设为无效
          valid = false
          setTimeout(() => {
            fn.call(this)
            valid = true
          }, delay)
          let time = new Date().getTime()
        }
      }

      // 2.利用时间戳
      function throttle(fn, delay) {
        let startTime = Date.now()
        return function () {
          var now = Date.now()
          if (now - startTime >= delay) {
            //大于1秒可以触发
            fn.call(this)
            startTime = Date.now()
          }
        }
      }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值