1. 程式人生 > 實用技巧 >什麼是防抖和節流?手寫一個防抖函式和節流函式?

什麼是防抖和節流?手寫一個防抖函式和節流函式?

1.防抖(debounce)

  當持續觸發事件時,一定時間段內沒有再觸發事件,事件處理函式才會執行一次,如果設定的時間到來之前,又一次觸發了事件,就重新開始延時。

  當你頻繁觸發後,n秒內只執行一次。

function test() {
     console.log('防抖')
}
window.addEventListener(
'mousemove', debounce(test, 1000)); function debounce(func, wait) {//核心程式碼 var timer, wait = +wait || 0; return function () {
var context = this var args = arguments timer ? clearTimeout(timer) : func.apply(context, args); timer = setTimeout(function () { func.apply(context, args) }, wait); } }

2.節流(throttle)

  當持續觸發事件時,保證一定時間段內只調用一次事件處理函式。

  在固定的時間內觸發事件,每隔n秒觸發一次

function throttle(func, wait) {
//核心程式碼 var timer, wait = +wait || 0; return function () { var context = this; var args = arguments; if (!timer) { func.apply(context, args) timer = setTimeout(function () { timer = null; }, wait) } } }

應用場景:

搜尋框搜尋時,使用者在不斷輸入值時,用防抖來節約請求資源。
頻繁操作點贊和取消點贊,因此需要獲取最後一次操作結果併發送給伺服器
登入按鈕或者其他什麼按鈕,使用者滑鼠不斷點選觸發,mousedown(單位時間內只觸發一次)
window觸發resize的時候,不斷的調整瀏覽器視窗大小會不斷的觸發這個事件,用防抖來讓其只觸發一次