浅谈js节流、防抖应用和案例

js的节流防抖是面试中可能会问到的,也是处理实际问题的一种方法,这也涉及到很多知识,了解里面每一步的意义,就能理解很多东西
摘要由CSDN通过智能技术生成

一、节流:简单地说,就是限制一个动作在一段时间内只能执行一次

打个比方,好比我们打英雄联盟或者王者荣耀的时候,释放技能都有一段冷却时间,比如Q技能有5秒的冷却时间,那么我们在5秒钟的时间内只能释放一次Q技能。
一般使用场景:
scroll 事件,每隔一秒计算一次位置信息等
比如我们常见的谷歌搜索框的联想功能
监听浏览器的滚动加载事件
高频鼠标点击事件(也可做防抖)
拖拽动画

节流代码
这是比较完整的节流写法,其实节流有两种简单的写法(只用setTimeout(能保证),只用time管理),这里结合了两种–保证第一次输入会执行,最后一次输入时间不到也会最后执行一次
function throttle(fn,interval){
   
   //最开始的时间
   let beginTime = new Date()
   let settimeer
   return function(args){
   
       //每次调用的时候查询时间
       let nowTime = new Date()
       let remainTime = interval - (nowTime-beginTime)
       //当小于等于0 时说明间隔时间到了
       if(remainTime<=0){
   
          fn.call(this,args)
          beginTime = new Date()
       }else{
   
        //这个else保证最后一次也要调用 就是最后一次调用的时候没有在间隔时间内,但是也要调用
        clearTimeout(settimeer)
        settimeer = setTimeout(()=>{
   
            fn.call(this,args)
        },remainTime)
       }
   }
 }

二、防抖:简单地说,就是 当一个动作连续触发,只执行最后一次。

还是举一个英雄联盟中的例子,比如你按下了回城键,那么在8秒钟之后,就会执行回城事件,但如果你再次按下回城键,那么回城时间又将重新计时,需要在等8秒才会执行回城事件。
一般使用场景:
搜索框搜索,我们只需要用户输完之后,再发送请求
浏览器窗口大小变更,我们是不是可以等待变更完成之后再计算窗口大小,防止重复渲染
文本编辑器的实时保存,无任何操作之后等待延迟时间进行保存
比如某些应用的点赞功能,我们就需要点击之后立即生效,但是用户后续如果不停的点击我们就可以进行防抖操作
登录、发短信等按钮避免用户点击太快࿰

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值