函数防抖-节流

 

复制代码
/**
 * 函数防抖
 * @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 @   DreamerSix  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示