0

カウント ダウン スクリプトがありますが、2 つの問題があります。1.カウントダウンが0に達せず停止するため、連続した負の数が表示されます。2. カウンターは Chrome でのみ表示され、Firefox や Internet Explorer では表示されません。これら 2 つの問題を解決するにはどうすればよいですか?

var sec, min, hr, day, timer, expireDate;

sec = 1000;
min = 60 * 1000;
hr = 60 * 60 * 1000;
day = 24 * 60 * 60 * 1000;
timer;
expireDate = new Date('Mon Sep 17 2012 14:26:00 GMT-0700');

timer = setInterval(function() {
    var currentDate, countdown, days, hours, minutes, seconds;
    currentDate = new Date();
    countdown = expireDate - currentDate;
    if (countdown === 0 ) {
        window.clearInterval(timer); 
        document.getElementById('countdown').innerHTML = 'EXPIRED!';
    }

    days = Math.floor(countdown / day);
    hours = Math.floor((countdown % day) / hr);
    minutes = Math.floor((countdown % hr) / min);
    seconds = Math.floor((countdown % min) / sec);
    console.log(countdown);
    document.getElementById('countdown').innerHTML = days + " " + hours + " " + minutes + " " + seconds;
}, 1000);​
4

3 に答える 3

2

次の 2 行で:

currentDate = new Date();
countdown = expireDate - currentDate;

現在時刻と予想時刻の差をミリ秒単位で取得しています。

正確に正しい値に達しない場合は、それを通り過ぎてしまいます。

===テストを次のように変更します<=

于 2012-09-17T21:30:57.087 に答える
1

他の人が述べたように、を使用する必要があります< 0

さらに、期限切れの条件が満たされると、すぐにラベルが上書きEXPIRED!されるため、ラベルが表示されることはありません。に続くコードを に移動ifするelseか、単に 内で返す必要がありifます。

if (countdown <= 0 ) {
    window.clearInterval(timer); 
    document.getElementById('countdown').innerHTML = 'EXPIRED!';
} else {
    days = Math.floor(countdown / day);
    hours = Math.floor((countdown % day) / hr);
    minutes = Math.floor((countdown % hr) / min);
    seconds = Math.floor((countdown % min) / sec);
    console.log(countdown);
    document.getElementById('countdown').innerHTML = days + " " + hours + " " + minutes + " " + seconds;
}

そして最後に、IE で動作しない理由はおそらくconsole.log. その時点でコンソールを開いていない場合、IE はこれで失敗します。この行を削除するconsole.logだけで、IE で問題なく動作します。

于 2012-09-17T21:35:08.417 に答える
0

時間をミリ秒と比較しています! これを機能させるには、驚くほど幸運でなければなりません。

currentDate = new Date();
countdown = expireDate - currentDate;

試す:

if (countdown < 0 ) {
于 2012-09-17T21:32:12.127 に答える