のフォーカスを失ったとき、誰かが特定のタスクを実行するにかかった時間を確認するために使用されて動作していません。のsetTimeoutは、ウィンドウは、私が「D2」と呼ばれるフォームフィールドに表示する単純なJavaScriptのクロノグラフを持っている
var milisec=0
var seconds=0
var complemento1=""
document.form1.d2.value='00:00:00'
function display(){
if (milisec>=9){
milisec=0
seconds+=1
}
else{
milisec+=1
}
complemento1=complemento2=complemento3="";
if ((seconds%60)<10) complemento1="0";
if ((Math.floor(seconds/60)%60)<10) complemento2="0";
if ((Math.floor(seconds/3600))<10) complemento3="0";
document.form1.d2.value=complemento3+Math.floor(seconds/3600)+":"+complemento2+(Math.floor(seconds/60)%60)+":"+complemento1+(seconds%60)
setTimeout("display()",100)
}
問題は、ユーザーが新しいタブを開いたとき/別のプログラムを使用するときにタイマーが停止し、ウィンドウが再びフォーカスされたときに再開することです(Chromeを使用)。それは時にはうまく動作するため、時にはうまく動作しないため、最も奇妙な動作をします。
私は焦点が合っていないときに停止するスクリプトが必要な多くの投稿を見ました。正反対で、1時間以上運がないと検索しました。あなたの助けが大変ありがとう!
nitpick: 'のsetTimeout(ディスプレイ、100)'へのsetTimeoutラインを変更余分な評価が生じるので、文字列を使用しないでください。 – epascarello
[タブでChromeで非アクティブになっているときにsetIntervalを動作させるにはどうすればよいですか?](http://stackoverflow.com/questions/5927284/how-can-i-make-setinterval-also-work-when- a-tab-is-in-in-chrome) – epascarello
Chromeは、タブのフォーカスが合っていないときに自動的にタイムアウトと間隔を調整しますが、そうしないと強制することはできませんが、特に、あなたが時間を計算している場合。タイムアウトが次の100msで実行されると仮定するのではなく、現在の時間を保存し、タイムアウトが発生した時刻と比較します。 – Mahn