avr39ripe

jsTickerClassBase

Mar 22nd, 2021
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>Study</title>
  6. </head>
  7. <body>
  8.     <script>
  9.         'use strict'
  10.  
  11.         class Ticker {
  12.             constructor(tickerId, baseDelay = 3000, ticksCount = 10, onTimeout) {
  13.                 this.tickerId = tickerId;
  14.                 this.delay = baseDelay;
  15.                 this.ticksCount = ticksCount;
  16.                 this.cnt = 0;
  17.                 this.onTimeout = onTimeout;
  18.             }
  19.  
  20.             arm() {
  21.                 this.cnt = 0;
  22.                 this.id = setTimeout(function ticker(object) {
  23.                     console.log(`Ticker #${object.tickerId} -> ${object.cnt}`);
  24.                     (++object.cnt) % 2 ? object.delay *= 2 : object.delay /= 2;
  25.                     if (object.cnt == object.ticksCount) {
  26.                         clearTimeout(object.id);
  27.                         if (object.onTimeout) { object.onTimeout(); }
  28.                     }
  29.                     else {
  30.                         object.id = setTimeout(ticker, object.delay, object);
  31.                     }
  32.                 }, this.delay, this);
  33.                 return this;
  34.             }
  35.  
  36.             disarm() {
  37.                 clearTimeout(this.id);
  38.                 return this;
  39.             }
  40.  
  41.             setDelay(baseDelay) {
  42.                 this.delay = baseDelay;
  43.                 return this;
  44.             }
  45.  
  46.             setTicksCount(ticksCount) {
  47.                 this.ticksCount = ticksCount;
  48.                 return this;
  49.             }
  50.  
  51.             setOnTimeout(onTimeout) {
  52.                 this.onTimeout = onTimeout;
  53.                 return this;
  54.             }
  55.  
  56.         }
  57.  
  58.         {
  59.             let t1 = new Ticker(1, 1500, 3, () => { console.log('t1 is done!') });
  60.             t1.arm();
  61.  
  62.             let t2 = new Ticker(2, 2500, 3, () => { console.log('t2 is done!') });
  63.             t2.arm();
  64.  
  65.         }
  66.     </script>
  67. </body>
  68. </html>
Advertisement
Add Comment
Please, Sign In to add comment