(手把手学会系列)--函数的节流和防抖

(手把手学会系列)–函数的节流和防抖

下面是上的是封装好的函数节流和防抖,可以直接拿去使用,更进一步的解说,再后期的更文中还会提到

函数节流

在函数需要频繁触发时候:函数执行一次后,只有大于设定的执行周期后才会执行
第二次,适合多次事件按时间做平均分配触发

  • 场景:
    • 窗口调用(resize)
    • 页面滚动(scroll)
    • DOM元素的拖拽,muonsemove
    • 抢购疯狂点击,mounsedown
  • 案例代码
    // 节流的函数
    function throttle(callback, time) {
      // 保证第一次事件必然调用回调
      let start = 0
      return function (...args) {
        console.log('throttle 事件')
        // 当前时间
        const current = Date.now()
        // 满足条件才调用
        if (current - start > time) {
          // 准备调用之前 当前时间保存到start
          start = current
          callback.apply(this, args)
        }
      }
    }
    function handleClick(event) {
      console.log('处理点击事件')
    }
    document.getElementById('throttle').onclick = throttle(handleClick, 2000)
    
函数的防抖

在函数需要频繁触发时候:在规定时间内,只让最后一次生效,前面不生效,适合多次事件一次响应的情况

  • 场景
    • 实时搜索联想(keyup)
    • 文本框输入验证(连续输入文字后发送ajax请求进行验证,验证一次就可以了)
  • 案例代码
    // 防抖函数
    function debounce(callback, time) {
      return function (...args) {
        console.log('debounce事件')
        // 清除上一次未完成的定时器
        if (callback.timeId) {
          clearTimeout(callback.timeId)
        }
        callback.timeId = setTimeout(() => {
          // 删除保存的定时器id标识
          delete callback.timeId
          // 延迟调用
          callback.apply(this, args)
        }, time);
      }
    }
    // 防抖函数
    function handleClick(event) {
      console.log('处理点击事件')
    }
    document.getElementById('debounce').onclick = debounce(handleClick, 2000)
    

未完待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值