JavaScript之防抖节流

106 阅读1分钟

防抖(debounce)

连续触发相同事件,每一次触发事件,前面的事件都会被取消,执行当前此触发。防抖会执行最后一次事件的触发

    <button>按钮</button>
    <script>
        function debounce() {
            let timer = null
            return function () {
                clearTimeout(timer)
                timer = setTimeout(() => {
                    console.log(new Date())
                }, 500)
            }
        }
        let fun=debounce()
        let btn=document.querySelector('button')
        btn.onclick=fun
    </script>

}

节流(throttle)

在规定时间内会执行一次,不管触发事件多少次,都会按照程序规定的节奏来执行

<button>按钮</button>
    <script>   
        function throttle(){
            let timer=null
            return function(){
                if(timer){
                    return
                }
                timer=setTimeout(()=>{
                    console.log(new Date())
                    timer=null
                },500)
            }
        }
        let fun=throttle()
        let btn=document.querySelector('button')
        btn.onclick=fun
    </script>

区别

连续快速点击500次,delay设置成500ms.===>防抖只会执行一次,而节流会执行(操作总时间ms/500ms)次

场景

标题
防抖搜索框的联想词条
节流滚动条,连续点击