js防抖和節(jié)流

防抖

多次事件觸發(fā)后、事件處理函數(shù)只執(zhí)行一次,并且是在觸發(fā)操作結(jié)束時執(zhí)行

function debounce(method,delay) {
    let timer = null;
    return function () {
        let self = this,
            args = arguments;
        timer && clearTimeout(timer);
        timer = setTimeout(function () {
            method.apply(self,args);
        },delay);
    }
}

節(jié)流

觸發(fā)函數(shù)事件后,短時間內(nèi)無法連續(xù)調(diào)用,只有執(zhí)行完上一次的函數(shù)后,過了規(guī)定時間才可以調(diào)用下一次

function throttle(method, mustRunDelay) {
    let timer,
        args = arguments,
        start;
    return function loop() {
        let self = this;
        let now = Date.now();
        if(!start){
            start = now;
        }
        if(timer){
            clearTimeout(timer);
        }
        if(now - start >= mustRunDelay){
            method.apply(self, args);
            start = now;
        }else {
            timer = setTimeout(function () {
                loop.apply(self, args);
            }, 50);
        }
    }
}

延時操作處理函數(shù)、若設定的延時到來之前、再次觸發(fā)函數(shù)、則清除上一次的延時操作定時器、重新定時

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

相關(guān)閱讀更多精彩內(nèi)容

  • 在進行窗口的resize、scroll,輸入框內(nèi)容校驗等操作時,如果事件處理函數(shù)調(diào)用的頻率無限制,會加重瀏覽器的負...
    iqing2012閱讀 903評論 0 1
  • 在進行窗口的resize、scroll,輸入框內(nèi)容校驗等操作時,如果事件處理函數(shù)調(diào)用的頻率無限制,會加重瀏覽器的負...
    為光pig閱讀 422評論 0 3
  • 在上周的開發(fā)中,又遇到點擊保存多次請求數(shù)據(jù)重復的問題,所以下來學習了一下js的防抖和節(jié)流。通過學習了解到,在進行窗...
    any_5637閱讀 435評論 0 2
  • 使用window.addEventListener()進行窗口的resize、scroll、輸入框?qū)崟r監(jiān)控等操作時...
    DDLH閱讀 420評論 0 1
  • JS防抖和節(jié)流 在進行窗口的resize、scroll,輸入框內(nèi)容校驗等操作時,如果事件處理函數(shù)調(diào)用的頻率無限制...
    Never_Settile閱讀 575評論 0 0

友情鏈接更多精彩內(nèi)容