JS中的防抖和節流 區別 和 實現方法

2021-10-12 07:39:42 字數 1150 閱讀 1236

函式節流(throttle)與 函式防抖(debounce)都是為了限制函式的執行頻次,以優化函式觸發頻率過高,導致的響應速度跟不上觸發頻率,出現延遲,假死或卡頓的現象;也為了防止多次呼叫介面導致資料錯誤。

1、函式防抖(debounce)

//防抖debounce**:

function

debounce

(fn,delay)

, delay);}

;}// 處理函式

function

handle()

//滾動事件

window.

addeventlistener

('scroll'

,debounce

(handle,

500)

);

2、函式節流(throttle)

//節流throttle**:

function

throttle

(fn,delay)

, delay);}

;}function

sayhi

(e)window.

addeventlistener

('resize'

,throttle

(sayhi,

500)

);

總結:

函式防抖:將多次操作合併為一次操作進行。原理是維護乙個計時器,規定在delay時間後觸發函式,但是在delay時間內再次觸發的話,就會取消之前的計時器而重新設定。這樣一來,只有最後一次操作能被觸發。

函式節流:使得一定時間內只觸發一次函式。原理是通過判斷是否有延遲呼叫函式未執行。

區別:函式節流不管事件觸發有多頻繁,都會保證在規定時間內一定會執行一次真正的事件處理函式,而函式防抖只是在最後一次事件後才觸發一次函式。 比如在頁面的無限載入場景下,我們需要使用者在滾動頁面時,每隔一段時間發一次 ajax 請求,而不是在使用者停下滾動頁面操作時才去請求資料。這樣的場景,就適合用節流技術來實現。

參考文獻:

節流和防抖 區別和實現

實現 函式節流 開始會執行一次,持續觸發事件的話,每隔wait時間執行一次 應用場景mousemove,scroll等會連續執行的事件,比較適合應用於動畫相關的場景。param fn 需要節流的函式 param wait 間隔時間 export function throttle fn,wait 1...

js防抖和節流

在進行視窗的resize scroll,輸入框內容校驗等操作時,如果事件處理函式呼叫的頻率無限制,會加重瀏覽器的負擔,導致使用者體驗非常糟糕。此時我們可以採用debounce 防抖 和throttle 節流 的方式來減少呼叫頻率,同時又不影響實際效果。函式防抖 函式防抖 debounce 當持續觸發...

js 防抖和節流

突然被人問到節流和防抖的區別,一臉大寫的懵逼,一直以為他倆是乙個東西。那趕緊學習一下吧。定義 多次觸發事件後,事件處理函式只執行一次,並且是在觸發操作結束時執行。原理 對事件處理函式做延時執行,如果在設定的時間內再次觸發事件函式,清除定時器 cleartimeout 重新計時。適用場景 乙個輸入框連...