1234567891011121314151617181920212223242526272829303132 |
- module.exports = throttle;
- /**
- * Returns a new function that, when invoked, invokes `func` at most once per `wait` milliseconds.
- *
- * @param {Function} func Function to wrap.
- * @param {Number} wait Number of milliseconds that must elapse between `func` invocations.
- * @return {Function} A new function that wraps the `func` function passed in.
- */
- function throttle (func, wait) {
- var ctx, args, rtn, timeoutID; // caching
- var last = 0;
- return function throttled () {
- ctx = this;
- args = arguments;
- var delta = new Date() - last;
- if (!timeoutID)
- if (delta >= wait) call();
- else timeoutID = setTimeout(call, wait - delta);
- return rtn;
- };
- function call () {
- timeoutID = 0;
- last = +new Date();
- rtn = func.apply(ctx, args);
- ctx = null;
- args = null;
- }
- }
|