JS中的节流和防抖

172 阅读1分钟

节流

概念:节流: 就是指连续触发事件但是在设定的⼀段时间内中只执⾏⼀次函数。

例如:设定2000毫秒执⾏,那你在2000毫秒触发在多次,也只在2000毫秒后执⾏⼀次

// 定义一个bool值,标记是否需要进行处理
 let flag = true // 默认需要进行处理                   
 button.addEventListener('click', function () { 
        //第一次点击执行判断,只能等到2000毫秒后flag重新赋值为true时才能再次进入判断
        if (flag) {                                    
        flag = false                                   
        setTimeout(function () {                       
        console.log(555);                              
        flag = true                                    
        }, 2000)                                       
     }                                              
 })

防抖

防抖: 就是指触发事件后在n秒内函数只能执⾏⼀次,如果在n秒内⼜触发了事件,则会重新计算函数执⾏时间。

例如:设定2000毫秒执⾏,当你触发事件了,他会2000毫秒后执⾏,但是在还剩1000毫秒的时候你⼜触发了事

件,那就会重新开始2000毫秒之后再执⾏

//定义一个变量接收定时器
let tid
input.addEventListener('input', function () {
        //每次操作都会执行停止计时器发送请求,只有等到不操作时后两秒才能发起请求
        clearTimeout(tid)                                                                   
        tid = setTimeout(function () { 
        axios({ method: 'get', url: '/api' })
        .then(function (res) { 
        console.log(res);})
        }, 2000)
 })