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があなたの答えですが、コードに重大なバグがあります: ユーザーがスタートボタンを何度もクリックするとどうなるでしょうか (手がかり: 多くの間隔が登録されています)。

私はあなたのためにもっと合理的に書きましたconstructor function。ユーザーが をクリックするとstart、 にtimerStarted変化しtrue、その逆も同様です。また、 であるため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 に答える
1

間隔は時間変数で発生しているためclearInterval(time)、一時停止関数で使用する必要があります!

于 2013-09-15T18:55:42.170 に答える
1

clearInterval(time)間隔を削除するために使用します。

http://jsfiddle.net/tQE5p/

于 2013-09-15T18:48:15.487 に答える