私が所有していないライブラリ コードと対話する Javascript を作成していて、(合理的に) 変更することはできません。一連の時間制限のある質問で次の質問を表示するために使用される Javascript タイムアウトを作成します。これは完全に難読化されているため、実際のコードではありません。ライブラリが行っていることは次のとおりです。
....
// setup a timeout to go to the next question based on user-supplied time
var t = questionTime * 1000
test.currentTimeout = setTimeout( showNextQuestion(questions[i+1]), t );
questionTime * 1000
によって作成されたタイマーに問い合わせることで、画面上に進行状況バーを表示したいと考えていますsetTimeout
。唯一の問題は、これを行う方法がないように見えることです。getTimeout
私が見逃している機能はありますか?私が見つけることができる Javascript タイムアウトに関する唯一の情報は、 による作成setTimeout( function, time)
と による削除のみに関連していclearTimeout( id )
ます。
タイムアウトが発生するまでの残り時間、またはタイムアウトが呼び出されてからの経過時間を返す関数を探しています。私の進行状況バーコードは次のようになります。
var timeleft = getTimeout( test.currentTimeout ); // I don't know how to do this
var $bar = $('.control .bar');
while ( timeleft > 1 ) {
$bar.width(timeleft / test.defaultQuestionTime * 1000);
}
tl;dr: javascript の setTimeout() までの残り時間を調べるにはどうすればよいですか?
これが私が現在使用しているソリューションです。私は、テストを担当するライブラリ セクションを調べて、コードを解読しました (ひどい、私の許可に反して)。
// setup a timeout to go to the next question based on user-supplied time
var t = questionTime * 1000
test.currentTimeout = mySetTimeout( showNextQuestion(questions[i+1]), t );
ここに私のコードがあります:
// setTimeout のラッパー 関数 mySetTimeout( 関数、タイムアウト ) { タイムアウト[ n = setTimeout( func, タイムアウト ) ] = { 開始: new Date().getTime(), 終了: new Date().getTime() + タイムアウト t: タイムアウト } n を返します。 }
これは、IE 6 以外のブラウザーでも問題なく機能します。元の iPhone でさえ、非同期になると予想していました。