2011-10-23 15 views
21
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'); 

ho messo questo codice nella sezione di intestazione e il setTimeout viene eseguito solo una voltasetTimeout viene eseguito solo una volta?

plz aiuto plz vedere http://www.beta.storeji.in/

+0

ogni risposta è corretta Sto pensando a setInterval quale risposta approvare ??? – pahnin

risposta

56

setTimeout deve essere eseguito una sola volta. Stai cercando setInterval.

var loop_handle = setInterval(slide, 3000); 

Inoltre, il secondo argomento dovrebbe essere un numero, non una stringa. Quando la chiamata di funzione non richiede argomenti, è preferibile fare riferimento alla funzione anziché utilizzare una stringa. Una stringa verrebbe convertita in una funzione. Questa funzione verrà eseguita nell'ambito della finestra.

setInterval("slide()", 3000); 
//becomes 
    setInterval(Function("slide();"), 3000); 
2

Sì, setTimeout viene eseguito solo una volta. Hai bisogno di setInterval.

2

Questo perché setTimeout() deve essere eseguito una sola volta. Per attivare un evento a intervalli prestabiliti, l'utente setInterval().

5

Si chiama solo una volta, quindi verrà eseguito solo una volta.

Forse stai pensando a "setInterval()".

Quando si chiama esso, tra l'altro, basta passare il nome della funzione e non una stringa:

setInterval(slide, 3000); 
4

Il setTimeout la funzione funziona una sola volta! Se si desidera eseguire in più volte si dovrebbe usare setInterval:

var loop_handle= setInterval("slide()",'3000'); 

Inoltre è possibile utilizzare setTimeout alla fine della funzione slide() di ri-set-timeout di nuovo:

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'); 
+1

Freddo. ma è possibile farlo per prestazioni leggermente migliori: var selector = $ ('# imgholder'); selettore. Qualunque cosa – Shahin

0

uso setTimeout con ricorsione (loop infinito)

Se si desidera mantenere lo spazio esatto tra ogni chiamata di funzione, utilizzare setTimeout anziché setInterval. setInterval può sovrapporsi ad un certo punto e questo comportamento spesso non è previsto.

(function test(){ 
    setTimeout(function(){ 
    console.log(1); 
    testt(); 
    }, 2000) 
})() 
0

Questo problema si verifica in genere quando si è usato setTimeout in loop ricorsione, per esempio in callback Ajax e quando si desidera eseguire qualcosa di ricorsione, ci si aspetta setTimeout a lavorare come passato. ricorda di usare setInterval in funzioni non ricorsive.

Problemi correlati