70 votes

Minuterie en boucle en javascript

J'ai besoin d'exécuter un morceau de code javascript, disons, toutes les 2000 millisecondes.

setTimeout('moveItem()',2000)

L'exemple ci-dessus exécutera une fonction après 2000 millisecondes, mais ne la ré-exécutera pas.

Donc, dans ma fonction moveItem, j'ai :

function moveItem() {
    jQuery(".stripTransmitter ul li a").trigger('click');
    setInterval('moverItem()',2000);
}

Cela ne fonctionne pas parce que je veux exécuter le morceau de code jQuery trigger click chaque intervalle de 2000 millisecondes, mais actuellement il est appelé tout le temps et le script doit être interrompu. En plus de cela, je pense que c'est un codage de très mauvaise qualité.... Comment résoudriez-vous ce problème ?

Merci beaucoup.

185voto

Miguel Ventura Points 6172

Notez que setTimeout et setInterval sont des fonctions très différentes :

  • setTimeout exécutera le code une fois après le délai d'attente.
  • setInterval exécutera le code pour toujours dans les intervalles du délai prévu.

Les deux fonctions renvoient un ID de l'horloge que vous pouvez utiliser pour annuler le délai d'attente. Tout ce que vous avez à faire est de stocker cette valeur dans une variable et de l'utiliser comme argument pour clearTimeout(tid) ou clearInterval(tid) respectivement.

Ainsi, en fonction de ce que vous voulez faire, vous avez deux choix valables :

// set timeout
var tid = setTimeout(mycode, 2000);
function mycode() {
  // do some stuff...
  tid = setTimeout(mycode, 2000); // repeat myself
}
function abortTimer() { // to be called when you want to stop the timer
  clearTimeout(tid);
}

ou

// set interval
var tid = setInterval(mycode, 2000);
function mycode() {
  // do some stuff...
  // no need to recall the function (it's an interval, it'll loop forever)
}
function abortTimer() { // to be called when you want to stop the timer
  clearInterval(tid);
}

Les deux sont des moyens très courants d'atteindre le même objectif.

6voto

Matt Ball Points 165937
setInterval(moveItem, 2000);

est le site façon d'exécuter la fonction moveItem toutes les 2 secondes. Le problème principal dans votre code est que vous appelez setInterval à l'intérieur, plutôt qu'à l'extérieur, du rappel. Si je comprends ce que vous essayez de faire, vous pouvez utiliser ceci :

function moveItem() {
    jQuery('.stripTransmitter ul li a').trigger('click');
}

setInterval(moveItem, 2000);

N.B. : Ne pas passer de chaînes de caractères à setTimeout ou setInterval - La meilleure pratique consiste à passer une fonction anonyme ou un identifiant de fonction (comme je l'ai fait ci-dessus). Faites également attention à ne pas mélanger les guillemets simples et doubles. Choisissez-en un et tenez-vous-en à celui-ci.

2voto

Derek Adair Points 6324

Je crois que vous cherchez setInterval()

2voto

ntownsend Points 2424

Il devrait l'être :

function moveItem() {
  jQuery(".stripTransmitter ul li a").trigger('click');
}
setInterval(moveItem,2000);

setInterval(f, t) appelle la fonction de l'argument, f une fois tous les t millisecondes.

0voto

Selva Points 1539

Voici la fonction de boucle automatique avec le code html. J'espère que cela pourra être utile à quelqu'un.

<!DOCTYPE html>
<html>
<head>
<style>
div {
position: relative;
background-color: #abc;
width: 40px;
height: 40px;
float: left;
margin: 5px;
}
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<p><button id="go">Run »</button></p>
<div class="block"></div>
<script>

function test() {
$(".block").animate({left: "+=50", opacity: 1}, 500 );
   setTimeout(mycode, 2000);
};
$( "#go" ).click(function(){
test();
});
</script>
</body>
</html>

Violon : DEMO

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X