事件節流

Joanne. ?發表於2018-08-10

在寫前端頁面的表單驗證時,經常會遇到輸入框輸入內容的時候進行表單的驗證,或者瀏覽器視窗縮放的時候觸發一個事件,亦或是瀏覽器發生滾動的時候觸發函式。

由於輸入、瀏覽器視窗縮放、頁面滾動都是在很快的時間內發生的事情,如果每次輸入或者縮放視窗都要去執行ajax請求的話,會影響頁面的效能,此時,我們就需要用到事件節流。

下面寫兩種比較常用的事件節流方法

方法一:setTimeout(消除抖動)

var timer;
$("#phone").on("keyup",function(){
    clearTimeout(timer);
    timer = setTimeout(function(){
        alert("輸入內容進行判斷");
    },500)
});複製程式碼

我們希望使用者只有在最後一次輸入的時候才會進行判斷,以上程式碼每次輸入的時候,都會重置計時器,只有當使用者輸入後時間超過0.5秒(使用者結束輸入)才會進行判斷,彈出“輸入內容進行判斷”彈窗,平時專案中這裡就可以寫ajax請求了。


方法二:計時器節流

$(document).ready(function() {
    var scrolled = false;

    $(window).scroll(function() {
        scrolled = true;
    });

    setInterval(function() {
        if (scrolled) {
            checkScrollPosition();
            scrolled = false;
        }
    }, 250);

    checkScrollPosition();
});複製程式碼

文件載入完成後給定一個scrolled為false,當頁面滾動的時候scrolled為true,計時器每隔250毫秒執行一次,判斷scrolled的值是否為true,若為true則執行checkScrollPosition(),並且將scrolled賦值為false。


相關文章