Advertisement
vit134

Throttle

Dec 27th, 2018
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.     Throttle
  3. */
  4.  
  5. const throttle = (func, delay) => {
  6.     let isThrottle = false;
  7.     let selfArgs;
  8.    
  9.     let wrapper = (...args) => {
  10.         if (isThrottle) {
  11.             selfArgs = args;
  12.             return;
  13.         }
  14.        
  15.         func.apply(this, args);
  16.        
  17.         isThrottle = true;
  18.        
  19.         setTimeout(() => {
  20.             isThrottle = false;
  21.             if (selfArgs) {
  22.                 wrapper.apply(this, selfArgs);
  23.                 selfArgs = null;
  24.             }
  25.         }, delay)
  26.     }
  27.    
  28.     return wrapper;
  29. }
  30.  
  31.  
  32. var f = function(a) {
  33.   console.log(a)
  34. };
  35.  
  36. // затормозить функцию до одного раза в 1000 мс
  37. var f1000 = throttle(f, 1000);
  38.  
  39. f1000(1); // выведет 1
  40. f1000(2); // (тормозим, не прошло 1000 мс)
  41. f1000(3); // (тормозим, не прошло 1000 мс)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement