js函數節流和函數防抖


概念解釋

函數節流: 頻繁觸發,但只在特定的時間內才執行一次代碼

函數防抖: 頻繁觸發,但只在特定的時間內沒有觸發執行條件才執行一次代碼

函數節流

函數節流應用的實際場景,多數在監聽頁面元素滾動事件的時候會用到。因為滾動事件,是一個高頻觸發的事件。

以下是監聽頁面元素滾動的示例代碼:

// 函數節流
var canRun = true;
document.getElementById("throttle").onscroll = function(){
    if(!canRun){
        // 判斷是否已空閑,如果在執行中,則直接return
        return;
    }

    canRun = false;
    setTimeout(function(){
        console.log("函數節流");
        canRun = true;
    }, 300);
};
// 函數節流的要點是,聲明一個變量當標志位,記錄當前代碼是否在執行。
// 如果空閑,則可以正常觸發方法執行。
// 如果代碼正在執行,則取消這次方法執行,直接return。

函數抖動

函數防抖的應用場景,最常見的就是用戶注冊時候的手機號碼驗證和郵箱驗證了。

只有等用戶輸入完畢后,前端才需要檢查格式是否正確,如果不正確,再彈出提示語。

以下還是以頁面元素滾動監聽的例子,來進行解析:

// 函數防抖
var timer = false;
document.getElementById("debounce").onscroll = function(){
    clearTimeout(timer); // 清除未執行的代碼,重置回初始化狀態

    timer = setTimeout(function(){
        console.log("函數防抖");
    }, 300);
};
// 函數節流的要點,也是需要一個setTimeout來輔助實現。延遲執行需要跑的代碼。
// 如果方法多次觸發,則把上次記錄的延遲執行代碼用clearTimeout清掉,重新開始。
// 如果計時完畢,沒有方法進來訪問觸發,則執行代碼。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM