尝试使用日期功能进行倒计时

时间:2017-02-07 21:08:43

标签: javascript

这是我的代码,它不起作用我认为问题是我在函数中返回的内容。 请帮忙。

var minutes = 25;
var seconds = 60;

function myFunction() {
  var start = setInterval(function() {
    if (seconds > 0) {
      seconds--;
    }
    if (seconds == 0) {
      seconds = 60;
      minutes--;
    }
    if (seconds == 0 && minutes == 0) {
      alert("done");
    }
    var time = minutes + ":" + seconds;
    return time;
  }, 1000);
  return start;
}
console.log(myFunction());

3 个答案:

答案 0 :(得分:1)

描述

显示代码的微小更改正在运行

<强>错误吗
- 在调用myFunction之前需要声明minutesseconds变量,重写需要这些参数。
- 不检查变量是否为负数,从而期望&#34;有效&#34;来自用户的数据 - 仅允许console.log(time),重写允许为每个tickonTimerComplete

传递函数

&#13;
&#13;
var minutes = 25;
var seconds = 60;

function myFunction() {
  var start = setInterval(function() {
    if (seconds > 0) {
      seconds--;
    }

    if (seconds == 0 && minutes == 0) {
      alert("done");
      // added this to clear the timer on 0 minutes 0 seconds
      clearInterval(start);
      return;
    }
    if (seconds == 0) {
      seconds = 59;
      minutes--;
    }

    var time = minutes + ":" + seconds;
    // adding this as this is the function being repeated
    console.log(time);
  }, 1000);
}

myFunction();
&#13;
&#13;
&#13;

我将如何重写

&#13;
&#13;
function timer(minutes, seconds, onTimerChanged, onTimerComplete) {
  var timerPointer = undefined;
  // if minutes is below 0 reset to 0
  if (minutes < 0) {
    minutes = 0;
  }
  // if seconds is set below 0 reset to 0
  if (seconds < 0) {
    seconds = 0;
  } else if (seconds > 59) {
    // this will add to minutes if too many seconds are passed
    minutes += Math.floor(seconds / 60);
    seconds = seconds % 60;
  }
  
  // this is the function to be called on each tick call
  // default: console.log
  if (onTimerChanged === undefined) {
    onTimerChanged = console.log;
  }
  if (onTimerComplete === undefined) {
    onTimerComplete = function() {
      console.log("done")
    };
  }
  // starts the timer
  this.start = function() {
      timerPointer = setInterval(tick, 1000);
    }
    // stops the timer
  this.stop = clearInterval(timerPointer);
  this.time = undefined;

  // function for each tick
  function tick() {
    if (seconds > 0) {
      seconds--;
    }

    if (seconds == 0 && minutes == 0) {
      // added this to clear the timer on 0 minutes 0 seconds
      clearInterval(timerPointer);
      if (onTimerComplete) {
        onTimerComplete();
      }
      return;
    }

    if (seconds == 0) {
      seconds = 59;
      minutes--;
    }

    // pads the numbers so they are always two digits
    this.time = padToTwo(minutes) + ":" + padToTwo(seconds);

    // if onTimeChanged exists call it
    if (onTimerChanged) {
      onTimerChanged(this.time);
    }
  }

  // padding the string to be two digits always
  function padToTwo(number) {
    if (number <= 99) {
      number = ("0" + number).slice(-2);
    }
    return number;
  }
}

// create the timer object
var test = new timer(-1, 500);
// start the timer
test.start();

// this would also work
// new timer(minutes, seconds).start();
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您的代码(差不多)有效。您只需等待26分钟即可看到警报。

if (seconds == 0 && minutes == 0) {
  clearInterval(start);
  alert("done");
}

答案 2 :(得分:0)

你拥有的两个回报都毫无意义。 console.log()只会输出一次。您必须在console.log()函数内部setInterval()运行多次。您还应该清除间隔以避免任何内存泄漏。

最后,我还添加了minutes > 0,因为否则秒数将为60,而时间已用完,则会为-1

var minutes = 25;
var seconds = 60;

function myFunction() {
  var start = setInterval(function() {
    if (seconds > 0) {
      seconds--;
    }
    if (seconds == 0 && minutes > 0) {
      seconds = 60;
      minutes--;
    } else
    if (seconds == 0 && minutes == 0) {
      clearInterval(start);
      alert("done");
    }
    var time = minutes + ":" + seconds;
    console.log(time);
  }, 1000);
}
myFunction();