@terminus/ngx-tools
Version:
[![CircleCI][circle-badge]][circle-link] [![codecov][codecov-badge]][codecov-project] [![semantic-release][semantic-release-badge]][semantic-release] [![MIT License][license-image]][license-url] <br> [![NPM version][npm-version-image]][npm-url] [![Github
42 lines • 4.33 kB
JavaScript
/**
* Return a function, that, as long as it continues to be invoked, will not be triggered. The
* function will be called after it stops being called for N milliseconds.
*
* @param func - The function to call after the debounce period
* @param wait - The length of time to wait between calls (ms)
* @param immediate - Whether the debounced function should be fired immediately
* @param windowRef - A reference to the global window object
* @returns The debounced function
*
* @example
* const myFunc = () => {console.log('hi!')};
* const myDebouncedFunc = debounce(myFunc, 200);
* myDebouncedFunc();
* myDebouncedFunc();
* myDebouncedFunc();
* // 'hi!' will only be logged once
*/
export function debounce(func, wait, immediate, windowRef) {
if (immediate === void 0) { immediate = false; }
if (windowRef === void 0) { windowRef = window; }
var timeout = null;
return function () {
var context = this;
var args = arguments;
var later = function () {
timeout = null;
if (!immediate) {
func.apply(context, args);
}
};
var callNow = immediate && !timeout;
if (timeout) {
clearTimeout(timeout);
}
timeout = windowRef.setTimeout(later, wait);
if (callNow) {
func.apply(context, args);
}
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVib3VuY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdGVybWludXMvbmd4LXRvb2xzL3V0aWxpdGllcy8iLCJzb3VyY2VzIjpbImRlYm91bmNlL2RlYm91bmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQ3RCLElBQWMsRUFDZCxJQUFZLEVBQ1osU0FBaUIsRUFDakIsU0FBMEI7SUFEMUIsMEJBQUEsRUFBQSxpQkFBaUI7SUFDakIsMEJBQUEsRUFBQSxrQkFBMEI7SUFFMUIsSUFBSSxPQUFPLEdBQWtCLElBQUksQ0FBQztJQUVsQyxPQUFPO1FBQ0wsSUFBTSxPQUFPLEdBQVksSUFBSSxDQUFDO1FBQzlCLElBQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQztRQUN2QixJQUFNLEtBQUssR0FBRztZQUNaLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDZixJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQzNCO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsSUFBTSxPQUFPLEdBQUcsU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBRXRDLElBQUksT0FBTyxFQUFFO1lBQ1gsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3ZCO1FBRUQsT0FBTyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTVDLElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDM0I7SUFDSCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXR1cm4gYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3QgYmUgdHJpZ2dlcmVkLiBUaGVcbiAqIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGl0IHN0b3BzIGJlaW5nIGNhbGxlZCBmb3IgTiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIGZ1bmMgLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBhZnRlciB0aGUgZGVib3VuY2UgcGVyaW9kXG4gKiBAcGFyYW0gd2FpdCAtIFRoZSBsZW5ndGggb2YgdGltZSB0byB3YWl0IGJldHdlZW4gY2FsbHMgKG1zKVxuICogQHBhcmFtIGltbWVkaWF0ZSAtIFdoZXRoZXIgdGhlIGRlYm91bmNlZCBmdW5jdGlvbiBzaG91bGQgYmUgZmlyZWQgaW1tZWRpYXRlbHlcbiAqIEBwYXJhbSB3aW5kb3dSZWYgLSBBIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIHdpbmRvdyBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBkZWJvdW5jZWQgZnVuY3Rpb25cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgbXlGdW5jID0gKCkgPT4ge2NvbnNvbGUubG9nKCdoaSEnKX07XG4gKiBjb25zdCBteURlYm91bmNlZEZ1bmMgPSBkZWJvdW5jZShteUZ1bmMsIDIwMCk7XG4gKiBteURlYm91bmNlZEZ1bmMoKTtcbiAqIG15RGVib3VuY2VkRnVuYygpO1xuICogbXlEZWJvdW5jZWRGdW5jKCk7XG4gKiAvLyAnaGkhJyB3aWxsIG9ubHkgYmUgbG9nZ2VkIG9uY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlPENvbnRleHQ+KFxuICBmdW5jOiBGdW5jdGlvbixcbiAgd2FpdDogbnVtYmVyLFxuICBpbW1lZGlhdGUgPSBmYWxzZSxcbiAgd2luZG93UmVmOiBXaW5kb3cgPSB3aW5kb3csXG4pOiBGdW5jdGlvbiB7XG4gIGxldCB0aW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICByZXR1cm4gZnVuY3Rpb24odGhpczogQ29udGV4dCkge1xuICAgIGNvbnN0IGNvbnRleHQ6IENvbnRleHQgPSB0aGlzO1xuICAgIGNvbnN0IGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgY29uc3QgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG5cbiAgICBpZiAodGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIH1cblxuICAgIHRpbWVvdXQgPSB3aW5kb3dSZWYuc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG5cbiAgICBpZiAoY2FsbE5vdykge1xuICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICB9XG4gIH07XG59XG4iXX0=