59 votes

Comment faire en sorte qu'un setInterval s'arrête après un certain temps ou après un certain nombre d'actions ?

J'ai créé une boucle de "changement de mots" avec jQuery en utilisant le code dans cette réponse : jQuery : Trouver un mot et le changer toutes les quelques secondes

Comment l'arrêter après un certain temps ? Disons après 60 secondes ou après qu'il ait parcouru la boucle ?

(function() {

  // List your words here:
  var words = [
      'Lärare',
      'Rektor',
      'Studievägledare',
      'Lärare',
      'Skolsyster',
      'Lärare',
      'Skolpsykolog',
      'Administratör'
    ],
    i = 0;

  setInterval(function() {
    $('#dennaText').fadeOut(function() {
      $(this).html(words[i = (i + 1) % words.length]).fadeIn();
    });
    // 2 seconds
  }, 2000);

})();

2voto

vsync Points 11280

Vous pouvez utiliser setTimeout à la place, ce qui est mieux :

(function foo(){ // wrap everything in a self-invoking function, not to expose "times"
  times = 20; // how many times to run
  (function run(){
    // do your stuff, like print the iteration
    document.body.innerHTML = times;

    if( --times ) // 200 * 20 = 4 seconds
      setTimeout(run, 100);
  })();
})();

1 votes

Faites attention, car le setTimeout récursif peut entraîner un dépassement de pile (l'erreur, pas ce site). medium.com/@devinmpierce/recursive-settimeout-8eb953b02b98

0 votes

@PRMan l'article en lien utilise une explication de la main et semble être faux : chaque rappel fait pour les délais expirés vient de la boucle d'événement avec une nouvelle pile d'appel. Appeler setTimeout à l'intérieur d'un tel callback ne provoquera pas de dépassement de pile.

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