JavaScriptでスマホがスリープから回復した時にカウントアップ(ダウン)を調整する

PWAアプリ化した場合でもそうなんですが、スマホをロックしたり自動で消灯した際、SetTimeoutの処理は一旦停止されます。その後画面を復帰させると、SetTimeoutの処理が再度復活します。

つまり、簡易ストップウォッチ機能とか、何かしらの時間測定をJS側で行っていると、スマホがスリープしていた時間はカウントされない場合があります。

今回はこの対策として、SetTimeout処理の中でスリープによってズレた時間を自動補正します。

HTMLには以下のように書いておきます。

SetTimeoutの中で、最終チェック時の経過時間からズレが5秒以上になったら自動的にズレた分を経過時間に追加します。(jQuery利用)

 

今回は簡易的なストップウォッチなのでこのような方法でやりましたが、欠点としては、ズレ補正の度に、若干(数ミリ秒ずつ)のずれが発生する可能性があります。

正確にズレ補正を行う場合は、計測スタート時に、開始時刻をミリ秒で記録しておくのが一番確実でしょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*