美文网首页JS基础
函数节流和防抖

函数节流和防抖

作者: 凯凯frank | 来源:发表于2019-12-26 19:42 被阅读0次

函数节流

定义:在指定时间内,函数只触发一次。
通常场景: 滚动条事件 或者 resize 事件。

var throttle1 = function(fn, interval){
    var prevTime;
    return function(){
        var nowTime = Date.now();
        if(!prevTime || nowTime - prevTime >= interval){
            fn.call(this);
            prevTime = nowTime;
        }

    }
}
var callApi = function(){
    console.log('call api', this)
}
var throttleCallApi = throttle1(callApi, 1000)
document.getElementById('btn').onclick = throttleCallApi
var throttle2 = (function(){
    var prevTime;
    return function(fn, interval){
        var nowTime = Date.now();
        if(!prevTime || nowTime - prevTime >= interval){
            fn();
            prevTime = nowTime;
        }
    }
})();

document.getElementById('btn').onclick = function(){
    var that = this
    throttle2(function(){
        console.log('call api', that, this)
    },1000);
}

推荐第一种写法

函数防抖

定义:在 n 秒内函数只执行一次,如果在 n 秒内又触发了事件,则重新计算函数执行时间。将多次高频操作优化为只在最后一次执行,
通常场景是:用户输入,只需再输入完成后做一次输入校验即可。

var debounce = function(fn ,delay){
    var timerId;
    return function(){
        clearTimeout(timerId)
        var that = this
        timerId = setTimeout(function(){
            fn.apply(that)
        }, delay)
    }
}

document.getElementById('btn').onclick = debounce(function(){
    console.log('do something', this)
} , 500)

相关文章

网友评论

    本文标题:函数节流和防抖

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