Dopo aver pensato su questo un po 'più difficile su questo, ho capito che quello che stai cercando di fare non è fattibile facilmente a causa del modo in cui le animazioni sono gestite in jQuery.
Poiché le animazioni sono gestite da una coda, non è possibile eseguire le animazioni simultanee sullo stesso elemento senza che siano nella stessa funzione.
Vale a dire,
$(element).animate(aThing, aTime);
.animate(anotherThing, anotherTime);
non ha intenzione di correre in parallelo. athing finirà in aTime, seguito da anotherThing della durata di anotherTime.
Così, si può realizzare solo modifiche multiple facendoli nella stessa funzione:
$(element).animate({aThing: aValue, anotherThing: anotherValue}, aTime);
ecco una rapida spiegazione dell'anatomia di come funzioni di animazione sono gestite all'interno di jQuery.
un oggetto Timer viene assegnato l'elemento per la durata dell'animazione:
function t(gotoEnd) {
return self.step(gotoEnd);
}
t.elem = this.elem;
jQuery.timers.push(t);
Quando si chiama la funzione di arresto, rimuove il timer da timer:
// go in reverse order so anything added to the queue during the loop is ignored
for (var i = timers.length - 1; i >= 0; i--) {
if (timers[i].elem === this) {
if (gotoEnd) {
// force the next step to be the last
timers[i](true);
}
timers.splice(i, 1);
}
}
Quindi, ci non è un modo per rimuovere una proprietà specifica di una funzione di animazione poiché il timer stesso viene ucciso.
L'unico modo ho potuto pensare di compiere sarebbe quello di tenere traccia del tempo di inizio e la durata, ri-accodamento l'animazione e l'arresto quello attuale.
var start = $.now();
var duration = 5000;
$(element).animate({opacity: '0.5', width: '500px'}, duration);
...
var remaining = duration - ($.now() - start);
$(element).animate({opacity: '0.5', remaining)
.stop();
avrei pensato che ci sarebbe un modo utilizzando le code di nome personalizzato, ma non sembrare come il '.Stop()' metodo può avere come bersaglio una coda specifica (per quanto posso dillo comunque). – user113716
Per ora ho richiesto di aggiungere questa funzione http://bugs.jquery.com/ticket/8227 – slifty
Quali sono i criteri per l'interruzione di un'animazione? Si basa su un'azione dell'utente? – Jeff