我正在创建一个简单的JavaScript计时器。首先,这是我正在使用的代码:
//Variables used for the timer
var timer = "waiting",
seconds = 0,
minutes = 0,
extraFill1 = "",
extraFill2 = "";
//Check whether to start or stop the timer
function toggleClock() {
if (timer === "waiting") {
setInterval(start, 1000);
timer = "executing";
document.getElementById("btn").innerText = "Stop";
}
else {
clearInterval(start);
timer = "waiting";
document.getElementById("btn").innerText = "Start";
}
}
//Increment seconds and display correctly
function start() {
seconds++;
//Add a leading zero for 1 digit numbers (seconds)
if (seconds < 10 || seconds === 60) {
extraFill1 = "0";
}
else {
extraFill1 = "";
}
//Increment minute when seconds reaches 60
if (seconds === 60) {
minutes += 1;
seconds = 0;
}
//Add a leading zero for 1 digit numbers (minutes)
if (minutes < 10) {
extraFill2 = "0";
}
else {
extraFill2 = "";
}
//display results
document.getElementById("result").innerHTML = extraFill2 + minutes + ":" + extraFill1 + seconds;
}
在我的第一个函数toggleClock()
中,我已经声明,如果为timer !== waiting
,则执行clearInterval(start)。如果timer === "executing
的话我想要clearInterval(start)
。这不起作用(我认为这是因为它有一个局部作用域?)。为了解决这个问题,我尝试写道:
var myTimer = setInterval(start, 1000);
当我想启动计时器时,我计划调用myTimer。相反,只要加载了页面(并且声明了变量),间隔就开始了。
我如何设置一个功能的时间间隔(点击按钮时),并有能力在以后停止/清除该时间间隔(按下相同的按钮)?
发布于 2018-06-01 08:09:14
您需要将前面对setInterval
的调用结果传递给clearInterval
;不需要将函数传递给clearInterval
,而是将intervalID
传递给它。例如:
let clockInterval;
function toggleClock() {
if (timer === "waiting") {
clockInterval = setInterval(start, 1000);
timer = "executing";
document.getElementById("btn").innerText = "Stop";
}
else {
clearInterval(clockInterval);
timer = "waiting";
document.getElementById("btn").innerText = "Start";
}
}
https://stackoverflow.com/questions/50634418
复制相似问题