1

シンプルなカウントダウン スクリプト ( jsFiddle ) があります。

var time = 60;
function countDown(timeLeft){
     $("#timeLeft").text(timeLeft);
    if(timeLeft!=0){
        setTimeout(function(){ countDown(--timeLeft); }, 1000);   
    }
}
countDown(time);

何らかの理由で、Chrome で実行して別のタブにフォーカスすると、タイマーが本来よりも 2 倍遅くなります...そのため、電話で独立したタイマーを同時に実行すると、正しく動作し、タイマーを使用してタブに戻ると、残り 30 秒程度と表示されます。スクリプトを含むタブがフォーカスされている場合は問題なく動作しますが、バックグラウンドで開いている場合にのみ非常に遅くなります。Firefox では発生しません。それはある種の奇妙なバグですか、それとも何か間違ったことをしていますか?

4

1 に答える 1

1

問題は、時間 = 60 で設定した setTimeout 関数が多すぎることです。60 個の setTimeouts があるため、パフォーマンスが低下します。代わりに setInterval を使用できます。

function countDown(timeLeft){
 var intervalProc = setInterval(function(){
  $("#timeLeft").text(timeLeft);
  timeLeft--;
  if(timeLeft <= 0){
   clearInterval(intervalProc);
  }
 })

}
于 2013-07-13T06:12:03.780 に答える