Javascript - 基本秒表可以多次启动,提高手表速度。解决方案?

Javascript - Basic stopwatch can be started multiple times, increasing the watch speed. Solutions?

这是我们的 JS 代码(基本上是从其他地方复制粘贴的),它或多或少可以工作,但是我们有一个问题,如果用户单击 "start" 按钮的速度是每按一次按钮,手表就会增加。

var h1 = document.getElementsByTagName('h1')[0],
    start = document.getElementById('start'),
    stop = document.getElementById('stop'),
    clear = document.getElementById('clear'),
    seconds = 0, minutes = 0,
    t;

function add() {
    seconds++;
    if (seconds >= 60) {
        seconds = 0;
        minutes++;
    }
    h1.textContent = (minutes ? (minutes > 9 ? minutes : "0" + minutes) : "00") + ":" + (seconds > 9 ? seconds : "0" + seconds);

    timer();
}

function timer() {
    t = setTimeout(add, 997.5);
}


/* Start button */
document.getElementById("start").onclick = timer;

/* Stop button */
document.getElementById("stop").onclick = function () {
    clearTimeout(t);
}

/* Clear button */
document.getElementById("clear").onclick = function () {
    h1.textContent = "00:00";
    seconds = 0; minutes = 0;
    clearTimeout(t);
}

是的,任何输入都很棒。我试着让停止功能("clearTimeout(t)")从定时器功能开始,只是想看看它是否会在它开始之前重置它,但它没有用。

有什么想法吗?你可能会说我是新手。

我的建议是在每次启动时检查秒表是否启动。要么取消当前的,开始新的:

function timer() {
    if (t) {
        clearTimeout(t);
    }
    t = setTimeout(add, 997.5);
}

或者如果已经启动则什么也不做:

function timer() {
    if (!t) {
        t = setTimeout(add, 997.5);
    }
}

document.getElementById("stop").onclick = function () {
    clearTimeout(t);
    t = null;
}