내가 소유하지 않은 라이브러리 코드와 상호 작용하고 (합리적으로) 변경할 수없는 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 래퍼
function mySetTimeout (func, timeout) {
타임 아웃 [n = setTimeout (func, timeout)] = {
시작 : new Date (). getTime (),
끝 : new Date (). getTime () + timeout
t : 시간 초과
}
반환 n;
}
이것은 IE 6이 아닌 모든 브라우저에서 잘 작동합니다. 심지어 원래의 iPhone에서도 비 동기화 될 것으로 예상했습니다.