1646 votes

Arrêtez l'appel setInterval en JavaScript

Je utilise setInterval(fname, 10000); pour appeler une fonction toutes les 10 secondes en JavaScript. Est-il possible de cesser cet appel sur un certain événement?

Je veux que l'utilisateur soit capable d'arrêter le rafraîchissement répété de données.

3voto

ClearInterval()

Notez que vous pouvez démarrer et mettre en pause votre code avec cette fonctionnalité. Le nom est un peu trompeur, car il dit EFFACER, mais il ne supprime rien. En fait, il met en pause.

Testez avec ce code :

HTML :

100
Démarrer
Arrêter

JavaScript :

let count;

function start(){
 count = setInterval(timer,100)  /// ICI NOUS EXÉCUTONS setInterval()
}

function timer(){
  document.getElementById('count').innerText--;
}

function stop(){
  clearInterval(count)   /// ici nous METTONS EN PAUSE setInterval() avec le code clearInterval()
}

1voto

Syed Shibli Points 158

Utilisez setTimeOut pour arrêter l'intervalle après un certain temps.

var interVal = setInterval(function(){console.log("Running")  }, 1000);
 setTimeout(function (argument) {
    clearInterval(interVal);
 },10000);

1voto

Littlee Points 963

Tant de gens ont donné de bonnes réponses, clearInterval est la solution correcte.

Mais je pense que nous pouvons en faire plus, pour que notre éditeur impose les meilleures pratiques avec les minuteries JavaScript.

Il est toujours facile d'oublier de nettoyer les minuteries mises en place par setTimeout ou setInterval, ce qui peut causer des bugs difficiles à trouver.

J'ai donc créé un plugin eslint pour le problème mentionné ci-dessus.

https://github.com/littlee/eslint-plugin-clean-timer

0voto

Dangerousgame Points 53

Je suppose que le code suivant vous aidera :

var refreshIntervalId = setInterval(fname, 10000);

clearInterval(refreshIntervalId);

Vous avez écrit le code correctement à 100%... Alors... Quel est le problème? Ou bien c'est un tutoriel...

0voto

Kamil Kiełczewski Points 6496

Essayer

let refresch = ()=>  document.body.style= 'background: #'
  +Math.random().toString(16).slice(-6);

let intId = setInterval(refresch, 1000);

let stop = ()=> clearInterval(intId);

body {transition: 1s}

Arrêter

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