1

SLaksが提供するSOのコードを変更したので、ユーザーがコンピューターの時刻を変更しても機能するようになります。

<div id="timer"></div>ページが読み込まれてからまだリアルタイムを表示している時間(ユーザーが自分のコンピューターで時間を変更した場合でも)。

時間が変更されると、アラートが表示されます(以下のコードを参照してください)。問題は次のとおりです。時間が変更されると、アラートは毎秒無限に表示されます(ただし、1回だけが予想されます)。なぜこうなった?

$(document).ready(function () {
    var start = new Date;
    var end = (new Date - start) / 1000;
    setInterval(function () {
        if (Math.abs(end - (new Date - start) / 1000 )>1) {
            start = new Date - end * 1000;
            alert(Math.abs(end - (new Date - start) / 1000 ));
        }
        end = (new Date - start) / 1000;

        $('#timer').text(end + " Seconds");
    }, 100);
});
4

1 に答える 1

2

実際には非常に簡単です。スクリプトの実行は、メッセージボックスが閉じられるまで一時停止されます。それを閉じると、タイマーはすでに遅延しており、条件は再び真になります。行を複製することで、自分でテストできますalert[...]。最初のメッセージを十分に速く閉じると、2番目のメッセージには1未満のメッセージが表示されます。

alertHTMLベースのフローティングウィンドウに置き換えるだけで、すべて問題なく動作します。

于 2013-01-12T23:20:08.123 に答える