debounce

Debounce

监听一个输入框,文字变化后触发change事件

直接用keyup事件,则会频繁触发change事件

防抖:用户输入结束或者暂停时,才会触发change事件

const input1=document.getElementById("input1");
let timer = null
input1.addEventListener('keyup',function(){
    if(timer){
        clearTimeout(timer)
    }
    timer = setTimeout(()=>{
        //触发change事件
        console.log(input1.value)
        timer = null
    },500)

})

封装debounce函数

function debounce(fn,delay = 500){
    //timer是在闭包中的
    let timer = null
    return function(){
        if(timer){
            clearTimeout(timer)
        }
        timer = setTimeout(()=>{
            fn.apply(this.arguments)
            timer= null
        },delay)
    }
}

input1.addEventListener('keyup',debounce(()=>{
    console.log(input1.value)
}),600)