Skip to main content

debounce

_.debounce(wait, func) # Ⓢ [Ⓣ][1] Ⓝ

Creates a debounced function that delays invoking func until after wait



milliseconds have elapsed since the last time the debounced function was



invoked. The debounced function comes with a cancel method to cancel



delayed func invocations and a flush method to immediately invoke them.



Provide options to indicate whether func should be invoked on the



leading and/or trailing edge of the wait timeout. The func is invoked



with the last arguments provided to the debounced function. Subsequent



calls to the debounced function return the result of the last func



invocation.





Note: If leading and trailing options are true, func is



invoked on the trailing edge of the timeout only if the debounced function



is invoked more than once during the wait timeout.





If wait is 0 and leading is false, func invocation is deferred



until to the next tick, similar to setTimeout with a timeout of 0.





See David Corbacho's article



for details over the differences between _.debounce and _.throttle.

Since​

0.1.0

Arguments​

  1. wait (number): The number of milliseconds to delay.
  2. func (Function): The function to debounce.

Returns​

(Function): Returns the new debounced function.

Example​

// Avoid costly calculations while the window size is in flux.
jQuery(window).on('resize', _.debounce(150, calculateLayout));

// Invoke `sendMail` when clicked, debouncing subsequent calls.
jQuery(element).on('click', _.debounce([300, {
'leading': true,
'trailing': false
}], sendMail));

// Ensure `batchLog` is invoked once after 1 second of debounced calls.
var debounced = _.debounce([250, { 'maxWait': 1000 }], batchLog);
var source = new EventSource('/stream');
jQuery(source).on('message', debounced);

// Cancel the trailing debounced invocation.
jQuery(window).on('popstate', debounced.cancel);