js之debounce和throttle

redhack發表於2017-12-12

滑動時處理onmousemove事件
debounce函式做的事情是:強制一個函式在某個連續的時間段內只執行一次,哪怕它會被呼叫多次,在停止操作一段時間後再呼叫,而不是在使用者操作的過程當中,瀏覽器觸發多少次事件,就執行多少次監聽函式。例如:在每3s時間段內連續的移動了滑鼠,瀏覽器可能觸發幾十甚至幾百個mouvemove事件不使用devounce,監聽函式就執行多次,如果對監聽函式使用100ms的去彈跳,那麼瀏覽器只會執行一次這個監聽函式,而且是在3.1s執行,
function debounce(fn, delay) {

// 定時器,用來 setTimeout
var timer

// 返回一個函式,這個函式會在一個時間區間結束後的 delay 毫秒時執行 fn 函式
return function () {

// 儲存函式呼叫時的上下文和引數,傳遞給 fn
var context = this
var args = arguments

// 每次這個返回的函式被呼叫,就清除定時器,以保證不執行 fn
clearTimeout(timer)

// 當返回的函式被最後一次呼叫後(也就是使用者停止了某個連續的操作),
// 再過 delay 毫秒就執行 fn
timer = setTimeout(function () {
  fn.apply(context, args)
}, delay)複製程式碼

}
}

相關文章