函数的防抖与节流

 

节流:在规定的间隔事件范围内不会重复触发回调,只有大于这个事件间隔才会触发回调,把频繁触发变为少量触发

防抖:前面的所有的触发都被取消,最后一次执行在规定的的时间之后才会触发,也就是说如果连续快速的触发,只会执行一次

<body>
    <p>输入内容:<input type="text"></p>
    <script>
        let input=document.querySelector("input")
        //文本发生变化立即执行
        input.oninput=function(){
            console.log(123)
        }
    </script>
</body>

  

 

 只要有文本的变化就会立即执行一次

我们使用一个插件实现防抖lodash插件

这个lodash插件,里面封装了函数的防抖和节流的业务

https://www.lodashjs.com/

对外暴露一个_函数

  console.log(_)

  

 

 bounced(防抖动)函数提供一个 cancel 方法取消延迟的函数调用以及 flush 方法立即调用。 可以提供一个 options(选项) 对象决定如何调用 func 方法,options.leading 与|或 options.trailing 决定延迟前后如何触发(注:是 先调用后等待 还是 先等待后调用)。 func 调用时会传入最后一次提供给 debounced(防抖动)函数 的参数。 后续调用的 debounced(防抖动)函数返回是最后一次 func 调用的结果。

这个函数是有一个返回值的

我们看

 let result =_.debounce(function(){},1000)
        console.log(result)

  

 

 

<body>
    <p>输入内容:<input type="text"></p>
    <script>
        let input=document.querySelector("input")
        //文本发生变化立即执行
        input.oninput=_.debounce(function(){
            console.log(123)
        },1000)
    </script>
</body>

 此时在进行输入完成之后在触发,就可以实现防抖

 

 

再看节流

 <h1>计数器<span>0</span></h1>
    <button>按钮加一</button>
    <script>

        var btn=document.querySelector("button")
        var span=document.querySelector("span")
        var count =0
        btn.onclick=function(){
            count++
            span.innerHTML=count
        }
    </script>

  

 

 现在点击几次就会变化多少次

如果我们想要在一秒内只执行这一次,不管行为有多快都只执行一次

创建一个节流函数,在 wait 秒内最多执行 func 一次的函数。 该函数提供一个 cancel 方法取消延迟的函数调用以及 flush 方法立即调用。 可以提供一个 options 对象决定如何调用 func 方法, options.leading 与|或 options.trailing 决定 wait 前后如何触发。 func 会传入最后一次传入的参数给这个函数。 随后调用的函数返回是最后一次 func 调用的结果。

   <h1>计数器<span>0</span></h1>
    <button>按钮加一</button>
    <script>

        var btn=document.querySelector("button")
        var span=document.querySelector("span")
        var count =0
        btn.onclick=_.throttle(function(){
            count++
            span.innerHTML=count
            console.log(123)
        },1000)
    </script>

  

 

 此时在进行快速的点击不管点击多少次都会在一秒内只执行一次

 

防抖:用户操作很频繁,但是只执行一次

节流:用户操作很频繁,但是把频繁的操作变为少陵操作(可以给浏览器有充裕的时间解析代码)

 

 

posted @ 2021-12-10 14:35  keyeking  阅读(45)  评论(0编辑  收藏  举报