setTimeout ne s'exécute qu'une seule fois?
function slide()
{
if($('.current').is(':last-child')){
$('.current').removeClass('.current');
$('#imgholder').first().addClass('.current');
$('#imgholder').animate({left: '3920px'});
}
else{
$nxt=$(".current");
$(".current").removeClass("current");
$nxt.next().addClass("current");
$('#imgholder').animate({left: '-=980'},{duration: 'slow', easing: 'easeOutBounce' });
}
}
var loop_handle= setTimeout("slide()",'3000');
J'ai mis ce code dans la section d'en-tête et le setTimeout ne s'exécute qu'une seule fois
Aide Plz plz voir http://www.beta.storeji.in/
8 réponses
setTimeout
ne devrait fonctionner qu'une fois. Vous cherchez setInterval
.
var loop_handle = setInterval(slide, 3000);
En outre, le deuxième argument devrait être un nombre, pas une chaîne. Lorsque l'appel de fonction ne nécessite aucun argument, il est préférable de faire référence à la fonction au lieu d'utiliser une chaîne. Une chaîne serait convertie en une fonction. Cette fonction sera exécutée dans le cadre de la fenêtre.
setInterval("slide()", 3000);
//becomes
setInterval(Function("slide();"), 3000);
Vous ne l'appelez qu'une seule fois, donc il ne s'exécutera qu'une seule fois.
Peut-être que vous pensez à "setInterval()".
Lorsque vous l'appelez, en passant, passez simplement le nom de la fonction et non une chaîne:
setInterval(slide, 3000);
La fonction setTimeout
ne s'exécute qu'une seule fois! Si vous voulez l'exécuter plus de fois, vous devez utiliser setInterval
:
var loop_handle= setInterval("slide()",'3000');
Vous pouvez également utiliser setTimeout
à la fin de la fonction slide()
pour re-set-timeout à nouveau:
var loop_handle;
function slide() {
if($('.current').is(':last-child')) {
$('.current').removeClass('.current');
$('#imgholder').first().addClass('.current');
$('#imgholder').animate({left: '3920px'});
}
else {
$nxt=$(".current");
$(".current").removeClass("current");
$nxt.next().addClass("current");
$('#imgholder').animate({left: '-=980'},{duration: 'slow', easing: 'easeOutBounce' });
}
loop_handle = setTimeout("slide()",'3000');
}
loop_handle = setTimeout("slide()",'3000');
Oui, setTimeout ne s'exécute qu'une seule fois. Vous avez besoin de setInterval.
C'est parce Que setTimeout()
est censé fonctionner qu'une seule fois. Afin de déclencher un événement sur les intervalles définis utilisateur setInterval()
.
Utilisez setTimeout avec récursion (boucle sans fin)
Si vous voulez conserver l'espace exact entre chaque appel de fonction, utilisez setTimeout à la place setInterval. setInterval peut se chevaucher à un moment donné et ce n'est souvent pas un comportement attendu.
(function test(){
setTimeout(function(){
console.log(1);
testt();
}, 2000)
})()
Ce problème se produit généralement lorsque vous utilisez setTimeout dans la boucle de récursion, par exemple dans le rappel ajax et lorsque vous voulez exécuter quelque chose de récursivité, vous vous attendez à ce que setTimeout fonctionne comme passé. n'oubliez pas d'utiliser setInterval dans les fonctions de non-récursivité.