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
			| 
											3 years ago
										 | 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; | ||
|  | 
 | ||
|  | }); |