js防抖和节流

防抖:

事件触发后,间隔时间内如果再次触发事件,则重新计算执行时间再触发事件。也就是说n秒时间内只执行一次事件,连续多次的触发,只会执行最后一次。

用到的场景:

  • 表单的提交
  • 一些数据的提交按钮
  • input输入框搜索事件
  • 浏览器窗口resize事件,窗口调整完成计算尺寸,避免重复渲染
  function debounce(func, time) {
    let timer = null;
    return () => {
      clearTimeout(timer);
      timer = setTimeout(()=> {
        func.apply(this, arguments)
      }, time);
    }
  }

节流:

事件连续频繁的触发,则在一定的间隔时间内触发事件,高频事件n秒内只执行一次,稀释事件的执行频率。

使用场景:

  • 滚动条滚动事件onscorll
  • 鼠标移动
  • keyup、keydown
  • DOM拖拽
  function throtte(func, time){
    let activeTime = 0;
    return () => {
      const current = Date.now();
      if(current - activeTime > time) {
        func.apply(this, arguments);
        activeTime = Date.now();
      }
    }
  }

区别:

针对连续触发的行为,防抖是在间隔时间内只执行最后一次触发,侧重于一定时间内只会执行一次;节流则是在每个间隔时间内只执行一次,降低高频事件触发的频率;二者的判断重点在于一个是只执行一次,一个是降低执行次数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值