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;
 | |
| 
 | |
| });
 |