J'utilise setInterval(fname, 10000);
pour appeler une fonction toutes les 10 secondes en JavaScript. Est-il possible d'arrêter de l'appeler lors d'un événement?
Je souhaite que l'utilisateur puisse arrêter l'actualisation répétée des données.
setInterval()
renvoie un ID d'intervalle que vous pouvez transmettre à clearInterval()
:
var refreshIntervalId = setInterval(fname, 10000);
/* later */
clearInterval(refreshIntervalId);
Voir la documentation pour setInterval()
et clearInterval()
.
Si vous définissez la valeur de retour de setInterval
sur une variable, vous pouvez utiliser clearInterval
pour l'arrêter.
var myTimer = setInterval(...);
clearInterval(myTimer);
Vous pouvez définir une nouvelle variable et la faire incrémenter de ++ (en compter une) à chaque exécution, puis j'utilise une instruction conditionnelle pour la terminer:
var intervalId = null;
var varCounter = 0;
var varName = function(){
if(varCounter <= 10) {
varCounter++;
/* your code goes here */
} else {
clearInterval(intervalId);
}
};
$(document).ready(function(){
intervalId = setInterval(varName, 10000);
});
J'espère que ça aide et que c'est juste.
Les réponses ci-dessus ont déjà expliqué comment setInterval renvoie un descripteur et comment ce dernier est utilisé pour annuler le minuteur d'intervalle.
Quelques considérations architecturales:
Veuillez ne pas utiliser de variables "sans portée". Le moyen le plus sûr consiste à utiliser l'attribut d'un objet DOM. Le lieu le plus simple serait "document". Si le rafraîchissement est lancé par un bouton Démarrer/Arrêter, vous pouvez utiliser le bouton lui-même:
<a onclick="start(this);">Start</a>
<script>
function start(d){
if (d.interval){
clearInterval(d.interval);
d.innerHTML='Start';
} else {
d.interval=setInterval(function(){
//refresh here
},10000);
d.innerHTML='Stop';
}
}
</script>
Comme la fonction est définie dans le gestionnaire de clic sur le bouton, vous n'avez pas besoin de la définir à nouveau. La minuterie peut être reprise si le bouton est cliqué à nouveau.
Déjà répondu ... Mais si vous avez besoin d'une minuterie sélectionnée et réutilisable qui prend également en charge plusieurs tâches à différents intervalles, vous pouvez utiliser my TaskTimer (pour Node et le navigateur).
// Timer with 1000ms (1 second) base interval resolution.
const timer = new TaskTimer(1000);
// Add task(s) based on tick intervals.
timer.add({
id: 'job1', // unique id of the task
tickInterval: 5, // run every 5 ticks (5 x interval = 5000 ms)
totalRuns: 10, // run 10 times only. (omit for unlimited times)
callback(task) {
// code to be executed on each run
console.log(task.name + ' task has run ' + task.currentRuns + ' times.');
// stop the timer anytime you like
if (someCondition()) timer.stop();
// or simply remove this task if you have others
if (someCondition()) timer.remove(task.id);
}
});
// Start the timer
timer.start();
Dans votre cas, lorsque les utilisateurs cliquent pour perturber l’actualisation des données; vous pouvez également appeler timer.pause()
puis timer.resume()
si elles doivent être réactivées.
Voir plus ici .
@cnu,
Vous pouvez arrêter l’intervalle lorsque vous essayez d’exécuter du code avant de regarder votre navigateur de console (F12) ... essayez de commenter clearInterval (trigger) est-il à nouveau une console, pas une beauté? : P
Vérifiez exemple une source:
var trigger = setInterval(function() {
if (document.getElementById('sandroalvares') != null) {
document.write('<div id="sandroalvares" style="background: yellow; width:200px;">SandroAlvares</div>');
clearInterval(trigger);
console.log('Success');
} else {
console.log('Trigger!!');
}
}, 1000);
<div id="sandroalvares" style="background: gold; width:200px;">Author</div>
La méthode clearInterval () peut être utilisée pour effacer un minuteur défini avec la méthode setInterval ().
setInterval renvoie toujours une valeur d'ID. Cette valeur peut être passée dans clearInterval () pour arrêter le chronomètre. Voici un exemple de minuterie commençant à 30 et s’arrêtant quand il devient 0.
let time = 30;
const timeValue = setInterval((interval) => {
time = this.time - 1;
if (time <= 0) {
clearInterval(timeValue);
}
}, 1000);
Déclarez la variable à affecter à la valeur renvoyée par setInterval (...) et transmettez la variable affectée à clearInterval ();
par exemple.
var timer, intervalInSec = 2;
timer = setInterval(func, intervalInSec*1000, 30 ); // third parameter is argument to called function 'func'
function func(param){
console.log(param);
}
// Partout où vous avez accès timer déclaré au-dessus de l'appel clearInterval
$('.htmlelement').click( function(){ // any event you want
clearInterval(timer);// Stops or does the work
});
var keepGoing = true;
setInterval(function () {
if (keepGoing) {
//DO YOUR STUFF HERE
console.log(i);
}
//YOU CAN CHANGE 'keepGoing' HERE
}, 500);
Vous pouvez également arrêter l'intervalle en ajoutant un écouteur d'événement à un bouton avec l'ID "stop-interval":
$('buuton#stop-interval').click(function(){
keepGoing = false;
});
HTML:
<button id="stop-interval">Stop Interval</button>
Remarque: l'intervalle sera toujours exécuté, mais rien ne se passera.
Voici comment j'ai utilisé la méthode clearInterval () pour arrêter le chronomètre après 10 secondes.
function startCountDown() {
var countdownNumberEl = document.getElementById('countdown-number');
var countdown = 10;
const interval = setInterval(() => {
countdown = --countdown <= 0 ? 10 : countdown;
countdownNumberEl.textContent = countdown;
if (countdown == 1) {
clearInterval(interval);
}
}, 1000)
}
<head>
<body>
<button id="countdown-number" onclick="startCountDown();">Show Time </button>
</body>
</head>