手寫防抖debounce

2022-07-10 16:57:12 字數 677 閱讀 2141

防抖 debounce (一段時間不觸發事件才執行一次handle函式)

const input1 = document.getelementbyid('input1')

let timer = null

input1.addeventlistener('keyup',function ()

timer = settimeout(() =>,500)

})

簡單的input防抖邏輯

情況一:

當輸入乙個數字時,keyup觸發,設定乙個定時器賦值給timer,500ms後列印input1.value的值

情況二:

當連續快速輸入幾個數字時,第乙個數字輸入後,keyup觸發,設定乙個定時器賦值給timer,還不到500ms時第二個數字又輸入了,此時timer有內容,清空前面的定時器,設定乙個新的定時器賦值給timer,直至最後乙個數字輸入完畢,500ms後列印input1.value的結果

封裝debounce防抖函式

function debounce(fn,delay = 500) 

timer = settimeout(() => ,delay)

}}input1.addeventlistener('keyup',debounce(function () ,600))

封裝思路

debounce 防抖和 throttle 節流

視窗的resize scroll,輸入框內容校驗等操作時,如果這些操作處理函式較為複雜或頁面頻繁重渲染等操作時,如果事件觸發的頻率無限制,會加重瀏覽器的負擔,導致使用者體驗非常糟糕。此時我們可以採用debounce 防抖 和throttle 節流 的方式來減少觸發的頻率,同時又不影響實際效果。deb...

debounce防抖函式的使用

說明 1.首頁有30多張,每次載入完都要執行乙個refresh的函式,由於執行次數過多,對refresh函式進行防抖 2.位於元件goodsitem.vue中,需要傳送事件給home.vue 步驟 1.建立乙個utils.js檔案封裝debounce函式 func為要執行的函式 要防抖的 delay...

防抖 debounce 和節流 throttle

當呼叫動作觸發一段時間後,才會執行該動作,若在這段時間間隔內又呼叫此動作則將重新計算時間間隔。function debounce method,timeout,context timeout function handleresize window.onresize debounce handler...