0

有人能帮我吗。我似乎无法让这个秒表暂停并显示暂停(停止)时间,然后在我再次点击开始时重新激活。

我不知道如何停止计时器计数。不确定结束计时器函数、为当前时间创建一个新函数还是使用 setInterval 继续减去 1 是否是最佳实践?

<script type="text/javascript">
var digit=-1.0;
var min=0;
var time;


function timer(){
        digit++;       

        if(digit>59){
                min++;
                document.getElementById("mins").innerHTML=padTimer(min);
                digit=0;
        }
        document.getElementById("secs").innerHTML=padTimer(digit);  
}

function padTimer(x) {
        if (x<=9) { x = ("0"+x); }
        return x;
}  

function start(){
                time=setInterval(timer, 1000);
                timer();
}

function pause() {
}

function reset(){
            digit=-1.0;
            timerPay=0;              
}

</script>

<a href="#" onclick="start()">Click here to start the timer</a>
<a href="#" onclick="pause()">Click here to pause the timer</a>

<a href="#" onclick="reset()">Click here to reset the timer</a>

<div>
<span id="mins" >00</span>:<span id="secs">00</span><br>
</div>
4

4 回答 4

1

由于时间间隔发生在时间变量中,因此您应该clearInterval(time)在暂停功能中使用!

于 2013-09-15T18:55:42.170 回答
1

用于clearInterval(time)删除间隔。

http://jsfiddle.net/tQE5p/

于 2013-09-15T18:48:15.487 回答
1

毫无疑问,这clearInterval就是您的答案,但是您的代码中有一个严重的错误:如果用户多次单击开始按钮会怎样(提示:注册了很多间隔)?

我为你写了一个更合理constructor function的。当用户单击时starttimerStarted更改为true,反之亦然。此外,由于它是 a constructor function,因此没有全局变量(Timer函数本身除外),您可以根据需要创建计时器。每个计时器都应该由new保留关键字创建。

function Timer (intervalSeconds) {
    this.__intervalSeconds = intervalSeconds;
    this.reset();
};

Timer.prototype.start = function () {
    if (!this.__timerStarted) {
        var self = this;

        this.__timerEventRegistered = setInterval(function() {
            self.timeElapsed += self.__intervalSeconds;
        }, this.__intervalSeconds);
    }
    this.timerStarted = true;
};

Timer.prototype.pause = function () {
    clearInterval(this.__timerEventRegistered);
    this._timerStarted = false;
}

Timer.prototype.reset = function () {
    this.pause();
    this.timeElapsed = 0;
}

// Timer creation example; the timer will be updated each 1000 milliseconds (= 1 second).
var timer = new Timer(1000);

您可以访问,timer.timeElapsed因此您可以查看时间并进行一些操作。

请注意:由于 Javascript 是单线程的,因此无法保证计时器可以完美运行。实际上,在某些情况下它可能与此相去甚远。

于 2013-09-15T20:59:12.203 回答
1

function pause() { clearInterval(time); }

于 2013-09-15T18:47:18.857 回答