foundation.util.timer.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. 'use strict';
  2. import $ from 'jquery';
  3. function Timer(elem, options, cb) {
  4. var _this = this,
  5. duration = options.duration,//options is an object for easily adding features later.
  6. nameSpace = Object.keys(elem.data())[0] || 'timer',
  7. remain = -1,
  8. start,
  9. timer;
  10. this.isPaused = false;
  11. this.restart = function() {
  12. remain = -1;
  13. clearTimeout(timer);
  14. this.start();
  15. }
  16. this.start = function() {
  17. this.isPaused = false;
  18. // if(!elem.data('paused')){ return false; }//maybe implement this sanity check if used for other things.
  19. clearTimeout(timer);
  20. remain = remain <= 0 ? duration : remain;
  21. elem.data('paused', false);
  22. start = Date.now();
  23. timer = setTimeout(function(){
  24. if(options.infinite){
  25. _this.restart();//rerun the timer.
  26. }
  27. if (cb && typeof cb === 'function') { cb(); }
  28. }, remain);
  29. elem.trigger(`timerstart.zf.${nameSpace}`);
  30. }
  31. this.pause = function() {
  32. this.isPaused = true;
  33. //if(elem.data('paused')){ return false; }//maybe implement this sanity check if used for other things.
  34. clearTimeout(timer);
  35. elem.data('paused', true);
  36. var end = Date.now();
  37. remain = remain - (end - start);
  38. elem.trigger(`timerpaused.zf.${nameSpace}`);
  39. }
  40. }
  41. export {Timer};