在两个setInterval函数之间切换

时间:2017-03-05 21:29:52

标签: javascript

问题:嗨,我正在研究番茄钟问题。当sessionTime倒计时为零时,我遇到从sessionTime切换到breakTime的问题。

可能的解决方案:我尝试了方法(startPomodoro(),startPomodoroTwo()),但都没有工作。

var countdown;

var model = {
  sessionTime: { seconds: 10, isFinished: false},
  breakTime: { seconds: 5, isFinished: false},

  timer: function(obj){
    console.log(obj.seconds);
    var self = this;
    countdown = setInterval(function() {
      obj.seconds--;
      console.log(obj.seconds);
      if(obj.seconds <= 0){
        obj.isFinished = true;
        clearInterval(countdown);
        return;
      }
    },500);
  },

  startPomodoro: function(){
    this.timer(this.sessionTime)
    this.timer(this.breakTime)
  },

  startPomodoroTwo: function(){
    if(this.sessionTime.isFinished === false){
    this.timer(this.sessionTime)
  } else if (this.breakTime.isFinished === false && this.sessionTime.isFinished === true){
    this.timer(this.breakTime)
  } else {
    console.log("Finish Pomo");
    }
  }
}
  1. startPomodoro(),它只会倒计时sessionTime和breakTime

  2. startPomodoroTwo(),这有效,但我需要执行三次这个功能,这不是我想要的。

1 个答案:

答案 0 :(得分:1)

尝试为活动创建数组:

var activities = [
  {name: 'session', duration: 10},
  {name: 'break', duration: 5}
];
var currentActivity = 0;

然后在计时器完成时切换活动。

function startActivity() {
  console.log(activities[currentActivity]);
  var duration = activities[currentActivity].duration;
  var timer = setInterval(function () {
    duration--;
    if (!duration) {
      currentActivity = (currentActivity + 1) % activities.length;
      clearInterval(timer);
      startActivity();
    }
  }, 1000);
}

尽量不要修改活动对象。您的代码会改变引用对象,这意味着您必须在活动完成后将秒数重置为10或5。