UNPKG

824 BJavaScriptView Raw
1var now = require('../time/now');
2
3 /**
4 */
5 function throttle(fn, delay){
6 var context, timeout, result, args,
7 diff, prevCall = 0;
8 function delayed(){
9 prevCall = now();
10 timeout = null;
11 result = fn.apply(context, args);
12 }
13 function throttled(){
14 context = this;
15 args = arguments;
16 diff = delay - (now() - prevCall);
17 if (diff <= 0) {
18 clearTimeout(timeout);
19 delayed();
20 } else if (! timeout) {
21 timeout = setTimeout(delayed, diff);
22 }
23 return result;
24 }
25 throttled.cancel = function(){
26 clearTimeout(timeout);
27 };
28 return throttled;
29 }
30
31 module.exports = throttle;
32
33