J'ai créé une boucle de "changement de mots" avec jQuery en utilisant le code de cette réponse: jQuery: Trouver Word et changer toutes les quelques secondes
Comment puis-je l'arrêter après un certain temps? dire après 60 secondes ou après avoir parcouru la boucle?
Vous pouvez voir les mots changer ici: http://skolresurser.se/
(function(){
// List your words here:
var words = [
'Lärare',
'Rektor',
'Studievägledare',
'Lärare',
'Skolsyster',
'Lärare',
'Skolpsykolog',
'Administratör'
], i = 0;
setInterval(function(){
$('#dennaText').fadeOut(function(){
$(this).html(words[i=(i+1)%words.length]).fadeIn();
});
// 2 seconds
}, 2000);
})();
Pour l'arrêter après avoir exécuté un nombre défini de fois, ajoutez simplement un compteur à l'intervalle, puis quand il a atteint ce nombre, effacez-le.
par exemple.
var timesRun = 0;
var interval = setInterval(function(){
timesRun += 1;
if(timesRun === 60){
clearInterval(interval);
}
//do whatever here..
}, 2000);
Si vous voulez l'arrêter après un temps défini (par exemple 1 minute), vous pouvez faire:
var startTime = new Date().getTime();
var interval = setInterval(function(){
if(new Date().getTime() - startTime > 60000){
clearInterval(interval);
return;
}
//do whatever here..
}, 2000);
Utilisez clearInterval
pour effacer l'intervalle. Vous devez passer l'ID d'intervalle que vous obtenez à partir de la méthode setInterval
.
Par exemple.
var intervalId = setInterval(function(){
....
}, 1000);
Pour effacer l'intervalle ci-dessus, utilisez
clearInterval(intervalId);
Vous pouvez changer votre code comme ci-dessous.
(function(){
// List your words here:
var words = [
'Lärare',
'Rektor',
'Studievägledare',
'Lärare',
'Skolsyster',
'Lärare',
'Skolpsykolog',
'Administratör'
], i = 0;
var intervalId = setInterval(function(){
$('#dennaText').fadeOut(function(){
$(this).html(words[i=(i+1)%words.length]).fadeIn();
if(i == words.length){//All the words are displayed clear interval
clearInterval(intervalId);
}
});
// 2 seconds
}, 2000);
})();
Vous pouvez utiliser setTimeout
à la place, ce qui est mieux:
(function foo(){ // wrap everything in a self-invoking function, not to expose "times"
times = 20; // how many times to run
(function run(){
// do your stuff, like print the iteration
document.body.innerHTML = times;
if( --times ) // 200 * 20 = 4 seconds
setTimeout(run, 100);
})();
})();
Vous devriez envisager d'utiliser une setTimeout()
récursive au lieu de setInterval()
pour éviter une condition de concurrence critique.
var fadecount = 1;
(function interval(){
$('#dennaText').fadeOut(function(){
$(this).html(words[i=(i+1)%words.length]).fadeIn('fast',function(){
if (fadecount < 30){
fadecount += 1;
setTimeout(interval, 2000);
}
});
});
}());