J'ai une fonction qui affiche des mots à différentes vitesses. La fonction démarre correctement, mais je n'arrive pas à obtenir le code correct pour l'arrêter à nouveau. Je sais que je dois utiliser clearInterval et je suppose que c'est pour vider la var myTimer - mais je n'arrive pas à faire fonctionner ça.Utilisation de clearInterval pour arrêter une fonction
Toute aide serait appréciée
HTML
<input type="button" value="Start" onclick="wpm($numberWords,$speed)" />
<input type="button" value="Stop" onclick="stopWpm()" />
JS
var myTimer;
function wpm(numberWords,speed) {
var input = new Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s");
var output = new Array();
for (var i = 0; i < input.length; i += numberWords) {
output.push(input.slice(i, i + numberWords).join(" "));
}
var i=0;
var myTimer =setInterval(timer,speed); //1000 will run it every 1 second
function timer() {
document.getElementById("timer").innerHTML = output[i];
i++;
if (i == output.length){
clearInterval(myTimer);
}
}
}
function stopWpm() {
clearInterval(myTimer);
}
Nous vous remercions de votre aide - cela fonctionne et je vois maintenant pourquoi! Cependant, si je clique plusieurs fois sur le bouton Démarrer, le code affichera "non défini" à la fin de la boucle. Est-il possible de vérifier si la fonction est déjà en cours d'exécution? – tomp
@tomp, pour vérifier si la fonction est déjà en cours, faire ensuite: après chaque appel de 'clearInterval (myTimer);' ajouter du code 'myTimer = 0;' et ensuite vous pouvez vérifier la fonction en cours comme 'if (myTimer) {/ * code si la fonction est en cours d'exécution ou prévue pour l'exécution * /} else {/ * code si la fonction n'est pas exécutée * /} '. Et acceptez la réponse. –
Merci Andrew - très apprécié! – tomp