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.
		
		
		
		
		
			
		
			
				
					
					
						
							48 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							48 lines
						
					
					
						
							1.4 KiB
						
					
					
				| import now from './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.
 | |
| export default 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;
 | |
| }
 |