2

プロジェクトでタイマーを使用していますが、2 つの問題があります。開始ボタンを押すと時間が開始し、終了ボタンを押すと時間が終了します。
ただし、1)終了ボタンをクリックし
ても時間が止まらない。
2)時間が減って1分になったら時間が止まって秒単位で再利用するべき

var tim;
var min = 10;
var sec = 10;
var f = new Date();

function f1() {
    f2();
    document.getElementById("starttime").innerHTML = "Your started your Exam at " + f.getHours() + ":" + f.getMinutes();


}

function f2() {
    if (parseInt(sec) > 0) {
        sec = parseInt(sec) - 1;
        document.getElementById("showtime").innerHTML = "Your Left Time  is :" + min + " Minutes ," + sec + " Seconds";
        tim = setTimeout("f2()", 1000);
    } else {
        if (parseInt(sec) == 0) {
            min = parseInt(min) - 1;
            if (parseInt(min) == 0) {
                clearTimeout(tim);
                location.href = ".././Home/Login";
            } else {
                sec = 60;
                document.getElementById("showtime").innerHTML = "Your Left Time  is :" + min + " Minutes ," + sec + " Seconds";
                tim = setTimeout("f2()", 1000);


            }
        }

    }
}
4

2 に答える 2

1

終了ボタンに関する最初の質問については、終了ボタンの機能が表示されません。ただし、タイムアウトをクリアする停止機能を使用できます。

function f3() {
    clearTimeout(tim);
    //update any text you wish here or move to the next page..
}

2 番目の質問については、なぜ 1 分で終了するのか。ゼロかどうかを確認する前に、分の値を減らしています。したがって、f2 になると、sec が 0 で min が 1 になり、min を 0 に減らします。そして、それがゼロかどうかを確認して、実行を終了します。その動きを解決するには、「min = parseInt(min) - 1;」else の後に移動し、最後の分もカウントする必要があります。

PS。既に数値を使用しているため、parseint は必要ありません。

于 2013-07-05T07:24:47.790 に答える
1

私の提案は次のとおりです。

フィドル

var tim;
var sec;
var f = new Date();

function f1() {
    sec = 10 * 60;
    f2();
    document.getElementById("starttime").innerHTML = "Your started your Exam at " + f.getHours() + ":" + f.getMinutes();
}

function f2() {
    if (sec > 0) {
        sec--;
        tim = setTimeout(f2, 1000);
    } else {
        document.getElementById("starttime").innerHTML = "times up!!!!";
    }
    
    var min = Math.floor(sec / 60);
    var secDisplay = sec % 60;
    
    document.getElementById("showtime").innerHTML = "Your Left Time  is : " + min + " Minutes," + secDisplay + " Seconds";
}

function end() {
    clearTimeout(tim);
    sec = 0;
    f2();
}

変更点は次のとおりです。

  • 変数を削除し、min2 つの変数の代わりに合計秒数のみを使用します。表示のために、合計秒数に基づいて分を簡単に計算できます。seconds 変数を使用すると、残り時間を簡単に確認できます。ご覧のとおり、コードは大幅に簡素化されています。

  • 関数を文字列ではなく引数として受け取るように setTimeout を変更しました。

  • end()終了ボタンがクリックされたときに呼び出される関数を追加しました。

  • f1()ページをリロードせずに繰り返し開始および終了できるように、秒カウントを内部に移動しました。

  • 不要なparseInt()通話を削除しました。sec 変数はすでに数値型であるため、変換する必要はありません。

秒数が に減ると、タイマーは停止し0ます。残り時間が1分になったら停止したい場合は、条件を次のように変更しf2()ますif (sec > 60) {

于 2013-07-05T07:15:27.633 に答える