2011-01-31 12 views
5

Ho una funzione ma continua a funzionare anche se chiamo uno stop(). Il nome della funzione è function slide() { //codes here }Come interrompere una funzione dall'esecuzione?

slide().stop(); 

Come per impedirgli di correre?
E come eseguirlo di nuovo dopo averlo fermato?
Quindi avrò il controllo completo su di esso.

+1

'.slide' non è un metodo noto in jQuery Core o nell'interfaccia utente jQuery.Stai usando un plugin personalizzato che implementa questo metodo o ti stai forse riferendo a '.slideUp' o' .slideDown'? – mekwall

+0

slide() è il nome della mia funzione, contiene molti codici all'interno. – Ryan

+2

jquery 'stop' funziona solo su animazioni jquery – sje397

risposta

9

.stop è un metodo per l'arresto di animazioni eseguite in modo asincrono (in background) sull'elemento corrente. Non interrompe/ferma nessun altro codice che non sta usando la libreria degli effetti.

Invece si dovrebbe dare un'occhiata a .queue che consente di impostare le code personalizzate che è possibile cancellare o deselezionare.

Esistono già ottime risposte su come utilizzare .queue quindi ti indicherò invece quella domanda: Can somebody explain jQuery queue to me? - Guarda la risposta di gnarf.

+0

Cosa dovrei fare allora? se non è stop()? – Ryan

1

Se la tua funzione è un processo javascript di lunga durata, dovresti inserire dei ganci esterni per interrompere il processo di esecuzione e continuare quando lo desideri. Se hai un ciclo while, dovresti controllare una condizione esterna per interrompere la sua esecuzione. Se non si dispone di un ciclo nel suo senso normale, si dovrà trovare un altro modo per controllare il condizionamento dello stato di funzionamento della funzione.

In genere non è possibile interrompere una funzione in esecuzione in Javascript. Non senza alcun codice aggiuntivo che sia.

Le funzioni di lunga durata verranno interrotte dai browser chiedendo all'utente se vogliono che lo script continui l'esecuzione o piuttosto lo interrompa (il browser presuppone che l'esecuzione sia stata impiccata come in un ciclo infinito).

Se si dispone di una funzione di lunga esecuzione in Javascript si dovrebbe dividere fnctionality in più parti e utilizzare javascript filettatura tecnica che ritarda l'esecuzione di funzioni brevi uno dopo l'altro per mezzo di window.setTimeout(function, delay);

4

Se colpisce un certo condizione nella funzione diapositiva, basta usare un'istruzione return; per uscire dalla funzione. Quindi per riavviarlo richiamare semplicemente la funzione slide(). Non è possibile utilizzare il codice dall'esterno della funzione per farlo uscire, deve essere all'interno della funzione.

2

avuto lo stesso problema e dopo aver letto l'ultima risposta da amurra questo è quello che ho fatto ...

dichiarato una variabile globale, collegandolo ad oggetto la 'finestra'. Questo fungerà da una bandiera e decidere se mantenere chiamando il 'slide_it()' funzione o per fermarlo Una volta che si entra nel mouse (elemento) $ la slide_it function() (ritorno)

window.slide_it = true; 

$(element).on({ 

    mouseenter: 
     function() { 
      window.slide_it = true; 
      slide_it(); 
     } 

    mouseleave: 
     function() { 
      window.slide_it = false; 
     } 

}); 

function slide_it() { 

    if(!window.slide_it) 
     return false; 

    $(element).stop().animate( 
     { 
      'left':'-=5px' 
     }, 
     100, 
     function() { slide_it() } 
    ); 

} 

volontà itera da solo. E si fermerà solo se window.slide_it è impostato su false. Quindi imposta window.slide_it su false quando "mouseleave" s

Spero che aiuti qualcun altro a risolvere il problema!

Problemi correlati