Domanda

Ho una pagina che utilizza

$(id).show("highlight", {}, 2000);

per evidenziare un elemento quando avvio una richiesta ajax, che potrebbe fallire, quindi voglio usare qualcosa di simile

$(id).show("highlight", {color: "#FF0000"}, 2000);

nel gestore degli errori.Il problema è che se la prima evidenziazione non è terminata, la seconda viene messa in coda e non verrà eseguita finché la prima non sarà pronta.Da qui la domanda:Posso in qualche modo fermare il primo effetto?

È stato utile?

Soluzione

Dai documenti jQuery:

http://docs.jquery.com/Effects/stop

Interrompe l'animazione attualmente in esecuzione sugli elementi corrispondenti....

Quando .stop() viene chiamato su un elemento, l'animazione attualmente in esecuzione (se presente) viene immediatamente interrotta.Se, ad esempio, un elemento viene nascosto con .slideUp() Quando .stop() viene chiamato, l'elemento verrà ancora visualizzato, ma sarà una frazione della sua altezza precedente.Le funzioni di callback non vengono chiamate.

Se viene chiamato più di un metodo di animazione sullo stesso elemento, le animazioni successive vengono inserite nella coda degli effetti per l'elemento.Queste animazioni non inizieranno fino al completamento della prima.Quando .stop() viene chiamato, l'animazione successiva nella coda inizia immediatamente.Se la clearQueue al parametro viene fornito un valore di true, il resto delle animazioni in coda verranno rimosse e non verranno mai eseguite.

Se la jumpToEnd all'argomento viene fornito il valore true, l'animazione corrente si interrompe, ma all'elemento vengono immediatamente assegnati i suoi valori target per ciascuna proprietà CSS.Nel nostro sopra .slideUp() ad esempio, l'elemento verrebbe immediatamente nascosto.La funzione di callback viene quindi richiamata immediatamente, se fornita...

Altri suggerimenti

L'ho elencato come commento per la risposta accettata, ma ho pensato che sarebbe stata una buona idea pubblicarla come risposta autonoma poiché sembra aiutare alcune persone che hanno problemi con .stop()


Per tua informazione, stavo cercando anche questa risposta (cercando di fermare un effetto pulsato), ma avevo un .stop() nel mio codice.

Dopo aver esaminato i documenti, avevo bisogno .stop(true, true)

.stop(vero,vero) congelerà l'effetto, quindi se è invisibile in quel momento rimarrà invisibile.Questo potrebbe essere un problema se si utilizza l'effetto pulsato.

$('#identifier').effect("pulsate", {times:5}, 1000);

Per aggirare questo problema ho aggiunto

$('#identifier').stop(true, true).effect("pulsate", { times: 1 }, 1);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top