函数防抖-节流

 

/**
 * 函数防抖
 * @param {function} fn 执行函数
 * @param {number} delay 延迟时间 毫秒
 * @param {boolean} immediately 是否立刻执行函数
 */
function debounce(fn,delay,immediately){
    var timer = null,firstInvoke=true;

    return function(){
        if(timer) {
            console.log('操作过于频繁');
            clearTimeout(timer);
        }

        if(immediately && firstInvoke){
            fn.apply(this,arguments);
            firstInvoke=false;
            return;
        }
        
        timer=setTimeout(()=>{
            fn.apply(this,arguments);
            timer=null;
            firstInvoke=true;
        },delay);
    }

}


/**
 * 函数节流
 * @param {function} fn 执行函数
 * @param {number} wait 等待时间 毫秒
 * @param {boolean} immediately 是否立刻执行函数
 */
function throttle(fn,wait,immediately){
    if(immediately){
        var executetime; 
        return function(){
            //首次执行 或者 距离上次执行的时间超过等待时间
            if(!executetime ||Date.now()-executetime>=wait){
                fn.apply(this,arguments);
                executetime=Date.now();//记录本次执行时间
            }
        }
    }else{
        var timer;
        return function () {
            if(timer) return;

            timer=setTimeout(()=>{
                fn.apply(this,arguments);
                timer=null;
            },wait);
        }
    }
}

 

posted @ 2023-11-29 16:58  DreamerSix  阅读(4)  评论(0编辑  收藏  举报