1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- "use strict";
- /**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @typechecks
- */
- /**
- * Invokes the given callback after a specified number of milliseconds have
- * elapsed, ignoring subsequent calls.
- *
- * For example, if you wanted to update a preview after the user stops typing
- * you could do the following:
- *
- * elem.addEventListener('keyup', debounce(this.updatePreview, 250), false);
- *
- * The returned function has a reset method which can be called to cancel a
- * pending invocation.
- *
- * var debouncedUpdatePreview = debounce(this.updatePreview, 250);
- * elem.addEventListener('keyup', debouncedUpdatePreview, false);
- *
- * // later, to cancel pending calls
- * debouncedUpdatePreview.reset();
- *
- * @param {function} func - the function to debounce
- * @param {number} wait - how long to wait in milliseconds
- * @param {*} context - optional context to invoke the function in
- * @param {?function} setTimeoutFunc - an implementation of setTimeout
- * if nothing is passed in the default setTimeout function is used
- * @param {?function} clearTimeoutFunc - an implementation of clearTimeout
- * if nothing is passed in the default clearTimeout function is used
- */
- function debounce(func, wait, context, setTimeoutFunc, clearTimeoutFunc) {
- setTimeoutFunc = setTimeoutFunc || setTimeout;
- clearTimeoutFunc = clearTimeoutFunc || clearTimeout;
- var timeout;
- function debouncer() {
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
- args[_key] = arguments[_key];
- }
- debouncer.reset();
- var callback = function callback() {
- func.apply(context, args);
- };
- callback.__SMmeta = func.__SMmeta;
- timeout = setTimeoutFunc(callback, wait);
- }
- debouncer.reset = function () {
- clearTimeoutFunc(timeout);
- };
- return debouncer;
- }
- module.exports = debounce;
|