节流 防抖

Posted javascript9527

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了节流 防抖相关的知识,希望对你有一定的参考价值。

什么是节流?

   阻止一个函数在短时间内的连续调用。  

   比如:设置一个按钮,去请求服务器,如果不设置节流,就可以无限点击获取,点一次触发一次函数。

   比如 后边的例子     :   一个函数每三秒才可以执行一次函数,三秒之内点击事件不会执行函数。

    

 

什么是防抖?

  当触发事件的时候,一定时间段内没有再触发事件,事件处理函数才会执行一次。如果设定的时间到来之前,又一次触发事件,就会重新开延时。

  将几次操作合并为一次操作进行

  函数防抖,就像法师放技能的时候,需要读条,只有读完才能放出技能。      如果 技能条没有读完,再按技能又会重新读条。

  常用防抖的事件:   scroll鼠标滚动事件  

 

防抖和节流的区别?

  函数节流:不管事件触发有多频繁,都会在规定的时间内执行一次函数。

  函数防抖: 只会在最后一次触发事件的时候,才会执行一次函数。

 

 

函数节流原理:

  设置一个开关变量,当开关为ture的时候可以执行,发送请求后,将开关设置为false,然后设置一个定时器,当接收到返回的数据后,再打开开关;

    <button id="btn">发送请求</button>
    <script>
    var canClick=true  //设置一个开关
    btn.onclick=function()
    if(canClick) //如果开关是开着的,说明可以单击
    canClick=false     //先关闭开关  再发送请求
    console.log("发送ajax请求")
    setTimeout(function()  //设置定时器,接收到请求后,在定时器末尾打开开关
    console.log("完成")
    canClick=true
    ,3000);
    
    
    </script>
//这个函数 每3秒可以发送一次请求

 

函数防抖原理

 使用定时器setTimeout做防抖。当鼠标滚动触发事件的时候,先用setTimeout延时一段时间再执行,如果在延时的这段时间内又触发了函数,就clearTimeout原来的定时器,

setTimeout一个定时器重复以上流程。

    <script>
        var timer; 
        window.onscroll=function()
        if(timer) 
        clearTimeout(timer)
        
        timer=setTimeout(function() 
        console.log(‘发送ajax请求,加载跟多数据‘)
        ,500)
        
  </script>

 

以上是关于节流 防抖的主要内容,如果未能解决你的问题,请参考以下文章

防抖和节流

JS防抖和节流

防抖和节流

JavaScript 防抖和节流的实现

JavaScript 防抖和节流的实现

节流函数-throttle