JavaScript の 防抖与节流

防抖

单位时间内,频繁触发事件,只执行最后一次,底层就是用定时器实现的

  • lodash实现

使用 _.debounce() 函数

语法:

_.debounce(fun,时间)

  mouse.addEventListener('mousemove',_.debounce(mouseMove,100))
  • 手写实现

核心思路:利用延时函数(setTimeOut)实现

  1. 声明定时器变量
  2. 每次事件触发都判断是否有定时器,如果有就先清除以前的定时器
  3. 打开定时器
    let time
    function mouseMove()
    {
      if(time)
      {
        clearTimeout(time)
      }
      time = setTimeout(function(){
        n+=1
        mouse.innerHTML=n
      },1000)
    }
    mouse.addEventListener('mousemove',mouseMove)

节流

单位时间内,频繁触发事件,只执行一次

多用于高频事件如:mousemove,resize,scroll

与防抖的区别:同样是面对频繁触发的事件,防抖是需要等到设定时间内事件不再触发的时候才执行,也就是说要停下来一段时间才执行,节流是设定时间内只执行一次,不需要停下来

  • lodash实现
    mouse1.addEventListener("mousemove",_.throttle(function(){
      m+=1
      mouse1.innerHTML=m
    },500))
  • 自己手写实现

同样是使用延时函数setTimeOut

    let time1
    mouse1.addEventListener("mousemove",function(){
      if(time1==0)
    {
      return
    }
    else
    {
      time1 = setTimeout(function(){
        m+=1
        mouse1.innerHTML=m
        time1=1
      },500)
      time1=0
    }
    })
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阮小航

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值