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.
		
		
		
		
		
			
		
			
				
					
					
						
							34 lines
						
					
					
						
							702 B
						
					
					
				
			
		
		
	
	
							34 lines
						
					
					
						
							702 B
						
					
					
				| 'use strict';
 | |
| 
 | |
| /**
 | |
|  * Throttle decorator
 | |
|  * @param {Function} fn
 | |
|  * @param {Number} freq
 | |
|  * @return {Function}
 | |
|  */
 | |
| function throttle(fn, freq) {
 | |
|   let timestamp = 0;
 | |
|   const threshold = 1000 / freq;
 | |
|   let timer = null;
 | |
|   return function throttled(force, args) {
 | |
|     const now = Date.now();
 | |
|     if (force || now - timestamp > threshold) {
 | |
|       if (timer) {
 | |
|         clearTimeout(timer);
 | |
|         timer = null;
 | |
|       }
 | |
|       timestamp = now;
 | |
|       return fn.apply(null, args);
 | |
|     }
 | |
|     if (!timer) {
 | |
|       timer = setTimeout(() => {
 | |
|         timer = null;
 | |
|         timestamp = Date.now();
 | |
|         return fn.apply(null, args);
 | |
|       }, threshold - (now - timestamp));
 | |
|     }
 | |
|   };
 | |
| }
 | |
| 
 | |
| export default throttle;
 |