Maison >interface Web >tutoriel CSS >Comment puis-je arrêter une boucle « setTimeout » ou « setInterval » en JavaScript ?

Comment puis-je arrêter une boucle « setTimeout » ou « setInterval » en JavaScript ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-01 16:23:09315parcourir

How Can I Stop a `setTimeout` or `setInterval` Loop in JavaScript?

Arrêter une boucle setTimeout

Lors de la construction d'un indicateur de chargement à l'aide d'un sprite, une approche courante consiste à utiliser une fonction pour définir la position d'arrière-plan de l’indicateur. Pour créer une boucle continue, le code a recours à l'appel récursif de la fonction dans un rappel setTimeout. Cependant, il peut arriver un moment où vous devrez arrêter cette boucle à la fin d'une certaine action.

Une solution consiste à récupérer le handle de minuterie renvoyé par setTimeout et à l'utiliser avec clearTimeout pour terminer la boucle. Voici une version modifiée du code qui implémente cette approche :

function setBgPosition() {
  var c = 0, timer = 0;
  var numbers = [0, -120, -240, -360, -480, -600, -720];

  function run() {
    Ext.get('common-spinner').setStyle('background-position', numbers[c++] + 'px 0px');
    if (c >= numbers.length) {
      c = 0;
    }
    timer = setTimeout(run, 200);
  }

  timer = setTimeout(run, 200);
  
  return stop;  // Function to stop the loop

  function stop() {
    if (timer) {
      clearTimeout(timer);
      timer = 0;
    }
  }
}

Pour utiliser ce code, vous pouvez appeler setBgPosition() et stocker la fonction renvoyée (stop) dans une variable :

var stop = setBgPosition();

Lorsque vous devez arrêter la boucle, appelez simplement la fonction stop :

stop();

Alternativement, vous pouvez utiliser setInterval au lieu de setTimeout. setInterval répète automatiquement la fonction spécifiée à un intervalle donné. Voici un exemple utilisant setInterval :

function setBgPosition() {
  var c = 0;
  var numbers = [0, -120, -240, -360, -480, -600, -720];

  function run() {
    Ext.get('common-spinner').setStyle('background-position', numbers[c++] + 'px 0px');
    if (c >= numbers.length) {
      c = 0;
    }
  }
  
  return setInterval(run, 200);
}

Dans ce scénario, le code ci-dessous arrêtera la boucle :

var timer = setBgPosition();
clearInterval(timer);

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn