setTimeout
comme suggéré dans quelques réponses n'est pas la bonne réponse. setTimeout
et setInterval
peuvent se ressembler, mais setTimeout
est destiné aux événements uniques, tandis que setInterval
sert à répéter des événements, comme une horloge.
Ainsi, setInterval
est la bonne réponse, mais Twisol n'offre que la moitié de la solution. La fonction setInterval démarre une horloge au chargement de la page, mais vous devez également arrêter l'horloge lorsque vous chargez une autre page. Si vous ne le faites pas, chaque fois que vous chargez à nouveau la page de votre horloge, un nouveau minuteur démarre alors que les anciens sont toujours conservés par votre navigateur.
<body onLoad="startTimer();" onUnload="stopTimer();">
Lorsque vous démarrez la minuterie, le setTimeout
renvoie l'identifiant de la minuterie, que vous transmettez comme argument à la fonction clearTimeout
fonction :
var intervalID;
function startTimer() {
intervalID = window.setInterval(updateDateAndTime, 200);
}
function stopTimer() {
window.clearInterval(intervalID);
}
nnnnnn s'interroge sur la fréquence des mises à jour. Il faut toutefois garder à l'esprit que la fonction de mise à jour complète n'a pas forcément besoin d'être exécutée 10 fois par seconde. Ma fonction d'horloge, par exemple, lit les cookies avec les paramètres de l'horloge. Il n'est pas souhaitable de lire les cookies 10 fois par seconde. Un cas plus important serait un appel de XMLHttpRequest
. Un serveur peut ou non répondre dans un délai de 100 ms.
Pour ces situations, je crée généralement un compteur de tic-tac qui s'incrémente chaque fois que la fonction updateDateAndTime
est appelé, et réinitialisé lorsque, par exemple, 100 est atteint. Cela signifie que le compteur de tic-tac est remis à zéro toutes les 10 secondes. C'est une bonne fréquence pour lire les cookies, ou envoyer un XMLHttpRequest
. Il suffit de regrouper les fonctions qui n'ont pas besoin d'être exécutées 10 fois par seconde, et de les exécuter à chaque fois que le compteur de tic-tac se remet à zéro.