防抖和节流

Posted linhongjie

tags:

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

最近在面试的时候有一面试题是关于防抖节流的,回来加强了一下,做以下总结,希望对大家有所帮助!

先来说一下防抖和节流的应用场景

  防抖 - debounce:

         1、input框输入时,可以使用防抖节约资源的请求,比如搜索框

    2、window触发resize时,当用户停止改变窗口的大小时,再触发事件

   节流 - throttle:

   1、 scroll滚动事件

   2、鼠标不断点击,mouseover事件等

 

下面用一个scroll事件,来实现以下节流和防抖吧

        // 防抖
        function debounce(fn,wait) {
            var timeout = null
            return function() {
                if(timeout !== null) clearTimeout(timeout)
                timeout = setTimeout(fn,wait)
            }
        }
        function handle() {
            console.log(Math.floor(Math.random()*100))
        }
        window.addEventListener(‘scroll‘,debounce(handle,1000))
                  
       //节流
        function throttle(func,delay) {
            var timer = null
            return function() {
                var that= this
                var args = arguments
                // 定时器不存在时,触发一个定时器,回调中清除定时器
                if(!timer) {
                    timer = setTimeout(() => {
                        func.apply(that,args)
                        timer = null
                    }, delay);
                }
            }
        } 

       function func() {
            console.log(parseInt(Math.random()*100))
        }

        window.addEventListener(‘scroll‘,throttle(func,1000))    

 

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

lodash的防抖和节流方法

JS基础-防抖和节流

防抖和节流代码实现

防抖和节流代码实现

JS的防抖和节流

防抖和节流啥区别,实现一个防抖和节流