美文网首页
防抖函数

防抖函数

作者: susu一口酥 | 来源:发表于2021-02-27 11:40 被阅读0次
    • 返回function函数防反跳版本,将延迟函数执行(真正的执行)在函数最后一次调用时候的wait毫秒后。
    • 传参immediate为true,debounce会在wait时间间隔的开始调用这个函数。在类似不小心点了提交按钮两次的情况下很有用。
    • immediate为是否立即执行
    /**
    * 防抖函数
    * @param fn   需要执行的函数
    * @param wait   等待的时间
    * @param immediate   是否立即执行
    */
    const debounce = function(fn,wait,immediate){
        // 定义定时器和返回结果
        let timeout,result;
        //延迟执行方法
        const delay = function(fn,wait,...args){
            return setTimeout(()=>{
                return fn.apply(null,args);
            },wait);
        }
        //定时执行的方法
        const later = function(context,args){
            timeout = null;
            if(args) result = fn.apply(context,args);
        }
    
        // 防抖执行方法
        const debounced = function(args){
            // 如果有计时器,清除
            if(timeout) clearTimeout(timeout);
            // 如果立即执行
            if(immediate){
                // 获取是否立即执行函数
                let callNow = !timeout;
                timeout = setTimeout(later,wait);
                if(callNow) fn.apply(this,args);
            }
            else{
                timeout = delay(later,wait,this,args);
            }
        }
    
        // 取消函数
        debounced.cancel = function(){
            clearTimeout(timeout);
            timeout = null;
        }
    
        return debounced;
    }
    

    相关文章

      网友评论

          本文标题:防抖函数

          本文链接:https://www.haomeiwen.com/subject/canbfltx.html