내가 소유하지 않은 라이브러리 코드와 상호 작용하고 (합리적으로) 변경할 수없는 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에서도 비 동기화 될 것으로 예상했습니다.