防抖和节流

一、什么是防抖

防抖是当事件被触发后,延迟n秒后再执行回调,如果再这n秒内事件又被触发,则重新计时,等于游戏中的回城。

二、防抖使用场景

1.输入框是按键触发请求时

用户连续输入一串字符时,可以通过防抖策略,只在输入完后,才执行查询的请求,这样可以有效减少请求次数,节约请求资源,
代码:

var time = null   
  //定义一个要发生的数据
  getdata(data){
  //data是发送的数据
    //发送请求
}
//防抖的timer

//定义防抖的函数,调用这个函数后,会设置一个定时器
//request是发送请求的函数。
function fn(keword,request){
//keword是你要传递的参数
//request是你发送请求的函数名
//开启定时器后,会返回一个定时器的id,可以接受这个id,清除的时候也是根据这个id来清除的。
   time = setTimeout({
   //发送请求
    request(keword)
}500)
}

input.keyup = function(){
     clearTimeout(timer)
     fn(keywords,getdata)
     //keywords是用户输入的值
}
//给输入框绑定事件
//按键抬起后触发, 先清除定时器,

缓存你的输入
1.定义一个全局的缓存对象
var cacheobg = {}
2.将搜索结果保存到缓存对象中

function  fn2(data){
   var a =   input.value
   //获取输入的内容当中键
   cacheobg [a]  = res
   //把结果和键名对应。
   //这样用户输入到这个内容时,就会对应到这个数据
   //然后显示出来。
   //这样就可以不用发送请求。直接获得数据。
}

三、什么是节流

节流就是减小一段实际内事件的触发频率,按下之后,后续的按下或输入都不会再执行,只能触发第一次的事件,必须等第一件事执行完后,才能执行下一次的事件。

//vue中的场景,time是data里的变量
cleartime(){
      //第一步是清除定时器,
       clearTimeout(this.time)
      //第二部要把存定时器的值清空,不然还存着定时器的那个id
      this.time = null
    },
     //请求函数
    getdata(){
     //如果定时器存在,则退出函数
    if(this.time){
      return
    }
    //不存在就创建一个定时器
      this.time = setTimeout(()=>{
       //用箭头函数this是vue
       //不用箭头函数,this是window
       //执行你的逻辑。

       //之后执行清空定时器函数在上面
        this.cleartime()
      },3000)
   
        }

自行封装可以更简便

四、节流的使用场景

1.鼠标连续点击触发事件

只在单位时间内触发一次。

2.懒加载时要监听计算滚动条的位置

但不必每次滑动都触发,可以降低计算的频率,而不必浪费cpu资源

五、节流阀的概念

节流阀为空,表示可以执行下次操作, 不为空,就不能执行下次操作。
当前操作执行完,必须将节流阀重置为空,表示可以执行下次操作。
每次执行前,必须先判断节流阀是否为空,不为空就直接return出去。

即就是防抖的代码不是去除定时器,而是判断定时器,存在就不会执行了,不存在定时器就会执行后面的代码。

六、防抖和节流的区别

防抖:事件被频繁的触发,防抖能保证只有最后一次触发生效,前面n多次的触发都会被忽略,
节流:如果事件被频繁触发,节流能够减少事件触发的频率,因此,节流是有选择性的执行一部分事件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值