| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | var now = require('./now.js');// Returns a function, that, when invoked, will only be triggered at most once// during a given window of time. Normally, the throttled function will run// as much as it can, without ever going more than once per `wait` duration;// but if you'd like to disable the execution on the leading edge, pass// `{leading: false}`. To disable execution on the trailing edge, ditto.function throttle(func, wait, options) {  var timeout, context, args, result;  var previous = 0;  if (!options) options = {};  var later = function() {    previous = options.leading === false ? 0 : now();    timeout = null;    result = func.apply(context, args);    if (!timeout) context = args = null;  };  var throttled = function() {    var _now = now();    if (!previous && options.leading === false) previous = _now;    var remaining = wait - (_now - previous);    context = this;    args = arguments;    if (remaining <= 0 || remaining > wait) {      if (timeout) {        clearTimeout(timeout);        timeout = null;      }      previous = _now;      result = func.apply(context, args);      if (!timeout) context = args = null;    } else if (!timeout && options.trailing !== false) {      timeout = setTimeout(later, remaining);    }    return result;  };  throttled.cancel = function() {    clearTimeout(timeout);    previous = 0;    timeout = context = args = null;  };  return throttled;}module.exports = throttle;
 |