web-dev-qa-db-fra.com

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.

28
pahnin

Ce problème se produit généralement lorsque vous avez utilisé setTimeout dans la boucle de récursivité, par exemple dans le rappel ajax et lorsque vous souhaitez exécuter quelque chose hors récursivité, vous vous attendez à ce que setTimeout fonctionne comme passé. n'oubliez pas d'utiliser setInterval dans les fonctions non récursives.

0
Cyber

utiliser setTimeout avec récursion (boucle sans fin)

Si vous souhaitez conserver l'espace exact entre chaque appel de fonction, utilisez setTimeout au lieu de 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)
})()
0
DevWL