You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							52 lines
						
					
					
						
							1.5 KiB
						
					
					
				
			
		
		
	
	
							52 lines
						
					
					
						
							1.5 KiB
						
					
					
				define(['./now'], function (now) {
 | 
						|
 | 
						|
  // 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;
 | 
						|
  }
 | 
						|
 | 
						|
  return throttle;
 | 
						|
 | 
						|
});
 |