trouver le temps de la gauche dans un setTimeout()?

Je suis en train d'écrire du Javascript qui interagit avec code de bibliothèque que je ne possède pas, et ne peut (raisonnablement) le changement. Il crée Javascript délais d'attente utilisé pour l'affichage de la question suivante dans une série de questions limitées. Ce n'est pas vraiment de code car il est dissimulé au-delà de toute espérance. Voici ce que la bibliothèque est en train de faire:

....
//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 );

Je veux mettre une barre de progression à l'écran qui remplit vers questionTime * 1000 en interrogeant le minuteur créé par setTimeout. Le seul problème est, il semble y avoir aucun moyen de le faire. Est-il un getTimeout fonction que je suis absent? La seule information sur Javascript délais d'attente que je peux trouver est liée uniquement à la création via setTimeout( function, time) et de suppression via clearTimeout( id ).

Je suis à la recherche d'une fonction qui retourne le temps restant avant un délai d'attente des incendies, ou le temps écoulé après un délai d'attente a été appelé. Ma barre de progression de code ressemble à ceci:

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: Comment puis-je trouver le temps restant avant un javascript setTimeout()?


Voici la solution que j'utilise maintenant. Je suis passé par la section de la bibliothèque qui est en charge de tests, et en clair le code (terrible, et contre ma autorisations).

//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 );

et voici mon code:

//wrapper pour setTimeout 
fonction mySetTimeout( func, délai d'attente ) { 
délais d'attente[ n = setTimeout( func, délai d'attente ) ] = { 
départ: new Date().getTime(), 
fin: new Date().getTime() + délai d'attente 
t: délai d'attente 
} 
return n; 
}

Cela fonctionne assez localisé dans n'importe quel navigateur qui n'est pas IE 6. Même l'iPhone original, où j'ai attendu que les choses se asynchrone.

InformationsquelleAutor Just Jake | 2010-06-29