12345678910111213141516171819202122232425262728293031323334 |
- module.exports = debounce;
- function debounce(fn, delay, atStart, guarantee) {
- var timeout;
- var args;
- var self;
- return function debounced() {
- self = this;
- args = Array.prototype.slice.call(arguments);
- if (timeout && (atStart || guarantee)) {
- return;
- } else if (!atStart) {
- clear();
- timeout = setTimeout(run, delay);
- return timeout;
- }
- timeout = setTimeout(clear, delay);
- fn.apply(self, args);
- function run() {
- clear();
- fn.apply(self, args);
- }
- function clear() {
- clearTimeout(timeout);
- timeout = null;
- }
- };
- }
|