/** * Limits the invocations of a function in a given time frame. * * The debounce function wrapper should be used sparingly. One clear use case * is limiting the invocation of a callback attached to the window resize event. * * Before using the debounce function wrapper, consider first whether the * callback could be attache to an event that fires less frequently or if the * function can be written in such a way that it is only invoked under specific * conditions. * * @param {Function} callback * The function to be invoked. * * @param {Number} wait * The time period within which the callback function should only be * invoked once. For example if the wait period is 250ms, then the callback * will only be called at most 4 times per second. */ Drupal.debounce = function (callback, wait) { "use strict"; var timeout, result; return function () { var context = this; var args = arguments; var later = function () { timeout = null; result = callback.apply(context, args); }; window.clearTimeout(timeout); timeout = window.setTimeout(later, wait); return result; }; };