2

作成したこのカウントダウン タイマーがあります。

<script type="text/javascript">
var interval;
    var minutes = 12;
    var seconds = 32;
    window.onload = function() {
        countdown('countdown');
}

function countdown(element) {
    interval = setInterval(function() {
        var el = document.getElementById(element);
        if(seconds == 0) {
            if(minutes == 0) {               
                minutes=7;
seconds=47;
                } else {
                    minutes--;
                    seconds = 60;
                }
            }
            if(minutes > 0) {
                var minute_text = minutes + (minutes > 1 ? ':' : ':');
            } else {
                var minute_text = '';
            }
            var second_text = seconds > 1 ?'':'';
            el.innerHTML = minute_text + ''+seconds + ' '+second_text + ' remaining';
            seconds--;
        }, 1000);

}
</script> 

結果は完全に機能しますが、タイマーが 10 桁未満 (12:03、12:05 など) に達すると、先頭に「0」を付けずに秒が表示されます。(12:03 ではなく 12:3)

これを修正しようとしましたが、どこにも行きませんでした。スクリプトを編集してこのバグを修正することはできますか?

4

5 に答える 5

1

コードを少しクリーンアップしました。

var interval,
    minutes = 12,
    seconds = 32;

window.onload = function() {
    countdown('countdown');
}

function countdown(element) {
    var el = document.getElementById(element),
        minutes_text, second_text;

    interval = setInterval(function() {
        if(seconds == 0) {
            if(minutes == 0) {
                minutes=7;
                seconds=47;
            }
            else {
                minutes--;
                seconds = 60;
            }
        }

        minutes_text = minutes;
        second_text = (seconds < 10 ? "0" : "") + seconds;

        el.innerHTML = minutes_text + ':' + second_text + ' remaining';
        seconds--;
    }, 1000);
}
于 2012-12-27T20:03:59.173 に答える
1

数値の前にゼロはありません。

手動で追加する必要があります。

if(seconds < 10) {
    second_text = "0" + seconds;
}
于 2012-12-27T20:00:14.307 に答える
1
second_text = (seconds > 9) ? (seconds) : ('0' + seconds);
于 2012-12-27T20:01:19.083 に答える
0

このスニペットを使用して、数値を文字列に変換します。

var secondStr = seconds + "";
while (secondStr.length < 2) {
    secondStr = "0" + secondStr;
}

同じことを数分と数時間行ってから、文字列を印刷します。

(1000の間隔を実行すると、間隔が1000ミリ秒以上になることをご存知ですか?間隔が長い場合でも、ティック全体を見逃すことはほとんどありません。これは、カウンターがリアルタイム秒に近いが正確ではないことを意味します。時々、コンピュータごとに異なります。)

于 2012-12-27T20:03:23.687 に答える
0

表示された値を埋める関数を追加してみてください

function padvalue(i) {
    if (i<10) {
        i="0" + String(i);
    }
    return i;
}

ここに電話して

el.innerHTML = minute_text + '' + padvalue(seconds) + ' ' + second_text + ' remaining';
于 2012-12-27T20:02:36.710 に答える