參考
一句話總結:防抖是碰到新呼叫就重置計時器,節流是碰到新呼叫就無視
函式防抖(debounce):當持續觸發事件時,一定時間段內沒有再觸發事件,事件處理函式才會執行一次,如果設定的時間到來之前,又一次觸發了事件,就重新開始延時。如下圖,持續觸發scroll事件時,並不執行handle函式,當1000毫秒內沒有觸發scroll事件時,才會延時觸發scroll事件。
使用settimeout實現,觸發事件,若當前沒有定時器,設定定時器。若有定時器,重設定時器。
function debounce(fn, wait)
}function handler()
document.getelementbyid('divx').addeventlistener('click',debounce(handler,1000))
當持續觸發事件時,保證一定時間段內只呼叫一次事件處理函式。
使用settimeout實現,若當前沒有定時器,設定定時器。若有定時器,無視。
var throttle = function(func, delay) , delay);}}
}function handle()
document.getelementbyid('divx').addeventlistener('click',throttle(handle,1000))
使用時間戳實現,記錄上一次呼叫的時間戳(第一次呼叫記錄的是載入時的時間戳),判斷當前時間和上乙個時間戳的間隔,若超過則執行,未超過則忽略。
//節流(時間戳)
var throttle = function(func, delay) }}
function handle()
document.getelementbyid('divx').addeventlistener('click',throttle(handle,1000))
防抖和節流 什麼是防抖和節流
目錄二 節流 有這樣一種情況,想象有乙個表單,點選提交按鈕就傳送請求給伺服器。如果使用者在很短的時間間隔內 手抖 點選了多次,又或者是惡意點選,那麼就將傳送多個請求。該行為將造成伺服器額外的不必要負載。所謂防抖,實際上就是是處理這種常見的情況的描述。submit該段 當點選submit按鈕的時候,將...
防抖和節流
在前端開發過程中,我們經常需要繫結一些持續觸發事件,如 resize scroll mousemove等等,但有些時候我們並不希望在事件持續觸發的過程中那麼頻繁的去執行函式。通常這種情況下,我們怎麼去解決呢?一般來講,防抖和節流是比較好的解決方案。一 函式的防抖 1 什麼是函式防抖 函式防抖 deb...
防抖和節流
防抖和節流的作用都是防止函式多次呼叫。區別在於,假設乙個使用者一直觸發這個函式,且每次觸發函式的間隔小於設定的時間,防抖的情況下只會呼叫一次,而節流的情況會每隔一定時間呼叫一次函式。1.防抖 函式防抖 debounce n秒內函式只會執行一次,如果n秒內高頻事件再次被觸發,則重新計算時間。如下例,對...