UNPKG

@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
/** * 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=