我有以下代码,用于启动和停止计时器。如果在开始和停止时单击一次,它工作正常。如果我多次点击开始如何以及如何停止“之前创建的”setInterval?
<html>
<head>
<script>
var myVar;
function myStartFunction() {
myVar = setInterval(function () {
myTimer();
}, 1000);
}
function myTimer() {
var d = new Date();
var t = d.toLocaleTimeString();
document.getElementById("demo").innerHTML = t;
}
function myStopFunction() {
clearInterval(myVar);
}
</script>
</head>
<body>
<p id="demo"></p>
<button onclick="myStopFunction()">Stop time</button>
<button onclick="myStartFunction()">Start time</button>
</body>
</html>
答案 0 :(得分:3)
setInterval
返回的值称为计时器句柄。如果您希望能够多次调用“start”并同时运行多个计时器,则需要将句柄保存在数组中。
例如,如果你想“停止”停止最后计时器,你就开始了:
var timers = [];
function myStartFunction() {
timers.push(setInterval(function () {
myTimer();
}, 1000));
}
function myTimer() {
var d = new Date();
var t = d.toLocaleTimeString();
document.getElementById("demo").innerHTML = t;
}
function myStopFunction() {
if (timers.length > 0) {
clearInterval(timers.pop());
}
}
附注:您不需要myStartFunction
中的匿名函数,您可以直接使用myTimer
:
function myStartFunction() {
timers.push(setInterval(myTimer, 1000));
}
答案 1 :(得分:0)
应该是这样的。
<html>
<head>
<script>
function myStartFunction() {
clearInterval(myTimer);
setInterval(myTimer, 1000);
}
function myTimer() {
var d = new Date();
var t = d.toLocaleTimeString();
document.getElementById("demo").innerHTML = t;
}
function myStopFunction() {
clearInterval(myTimer);
}
</script>
</head>
<body>
<p id="demo"></p>
<button onclick="myStopFunction()">Stop time</button>
<button onclick="myStartFunction()">Start time</button>
</body>
</html>