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
Libérer: 2024-12-01 16:23:09
original
375 Les gens l'ont consulté

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;
    }
  }
}
Copier après la connexion

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

var stop = setBgPosition();
Copier après la connexion

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

stop();
Copier après la connexion

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);
}
Copier après la connexion

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

var timer = setBgPosition();
clearInterval(timer);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal