欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于防抖和节流的思考

程序员文章站 2022-05-14 13:28:12
...
关于防抖节流的思考
防抖
  • 我个人是这么理解的,就是在指定时间内不能有多余的抖动,不然会重新计时,更确切的说,就是在指定时间内只能触发一个事件,如果这段时间内有其他的事件发生,那么就会重新计时。
  • 按事件发生的时刻可以分为,立即发生和延迟之后发生
// 延迟发生
function debounce(fn,wait){
    var timeout
    return function(){
        if(timeout){
            clearTimeout(timeout)
        }
        var args = Array.prototype.slice.call(arguments)
        timeout = setTimeout(()=>{
        	//延迟之后发生
            fn.apply(this,args)
        },wait)
    }
}
//立即发生
function immdebounce(fn,wait){
    var timeout
    return function(){
        if(timeout){
            clearTimeout(timeout)
        }
        var args = Array.prototype.slice.call(arguments)
        //立马发生
        if(!timeout){
            fn.apply(this,args)
        }
        timeout = setTimeout(()=>{
            timeout = null
        },1000)
    }
}
节流
  • 什么是节流?就是事件还是会持续发生,但是延迟时间内只能有一次事件的发生,某种意义上来讲,就是事件发生的频率变慢了
function throttle(fn,wait){
    var timeout
    return function(){
        var args = Array.prototype.slice.call(arguments)
        if(!timeout){
            timeout = setTimeout(()=>{
                timeout = null
                fn.apply(this,args)
            },wait)
        }
    }
}