關于節(jié)流和防抖

在前端開發(fā)中會遇到一些頻繁的事件觸發(fā),比如:

  • window 的 resize、scroll
  • mousedown、mousemove
  • keyup、keydown
    這會導致綁定的函數(shù)頻繁地執(zhí)行。
    為了防止太過于頻繁地執(zhí)行綁定的函數(shù),我們一般有兩種解決方法:
  • 1、debounce 防抖
  • 2、throttle 節(jié)流

防抖

防抖的原理是:在事件觸發(fā)n秒之后才執(zhí)行函數(shù),如果在n秒之內,又觸發(fā)了這個事件,則以新的時間為準,n秒后再執(zhí)行??傊?,就是要觸發(fā)事件n秒之內不再觸發(fā),才會執(zhí)行。

function debounce(func, wait) {
    var timeout;
    return function () {
        var context = this;
        var args = arguments;
        clearTimeout(timeout)
        timeout = setTimeout(function(){
            func.apply(context, args)
        }, wait);
    }
}

節(jié)流

節(jié)流的原理:如果持續(xù)觸發(fā)事件,每隔n秒執(zhí)行一次事件。
有兩種方式實現(xiàn)節(jié)流:1、時間戳;2、定時器
時間戳:

function throttle(func, wait) {
    var context, args;
    var previous = 0;

    return function() {
        var now = +new Date();
        context = this;
        args = arguments;
        if (now - previous > wait) {
            func.apply(context, args);
            previous = now;
        }
    }
}

定時器:

function throttle(func, wait) {
    var timeout;
    var previous = 0;

    return function() {
        context = this;
        args = arguments;
        if (!timeout) {
            timeout = setTimeout(function(){
                timeout = null;
                func.apply(context, args)
            }, wait)
        }

    }
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容