2017-02-14 1 views
0

Ich habe Probleme beim Synchronisieren einer Farbwechselanimation mit jQuery. Aus irgendeinem Grund ändert sich die Schriftfarbe innerhalb eines Schaltflächenelements nur dann, wenn alle anderen Farbänderungen verarbeitet wurden. Hier ist der Code:jQuery Farbe animiert keine Synchronisierung über mehrere Elemente

$(".jumbotron-fluid, .btn").animate({ 
    backgroundColor: colors[seed]["background"] 
}); 
$(".container").animate({ 
    backgroundColor: colors[seed]["container"] 
}); 
$("p, blockquote footer, .btn, a:link, a:visited, a:hover, a:active, a").animate({ 
    color: colors[seed]["font"] 
}); 

Hier ist ein Link zu einem CodePen, die dieses Projekt in Aktion zeigt: http://codepen.io/christianflorez/full/OWdYRm/

Wenn auf dem „Holen Sie sich ein neues Angebot“ klicken, jedes Mal, wenn die Schriftfarbe in der Die Schaltfläche ändert sich in Weiß und ändert sich nicht synchron mit dem Rest des DOM. Wer weiß, warum das passieren könnte? Ich habe versucht, den Code über mehrere Browser zu testen und das gleiche Problem erscheint. Danke an alle für Ihre Hilfe.

+0

Javascript ist nicht multi-threaded. Nur ein Prozess gleichzeitig. Ihre jQuery-Animationen werden nur ausgelöst, wenn die vorherige jQuery-Animation fertig ist, wenn Sie in dem von Ihnen erstellten Format gescriptet haben. Um dies zu umgehen, können Sie die Animationsfunktion in einen einzigen Handler einfügen, und die Animationen werden gestartet, sobald die einzelne Funktion aufgerufen wird. – Korgrue

+0

@Korgrue, JavaScript ist zwar nicht multi-threaded, aber das bedeutet nicht, dass jQuery-Animationen nicht parallel ablaufen können. Jede Animation wird in vielen separaten Ereignis-Threads ausgeführt, sodass mehrere Animationen verschachtelt werden können. –

Antwort

1

Der queue Parameter von animate wird standardmäßig auf true gesetzt. Wenn Sie zweimal .btn animieren, wird die zweite Animation nach dem Ende des ersten ausgelöst. Ändern Sie queue zu false für die erste .btn animieren. codepen link

$(".jumbotron-fluid, .btn").animate({ 
    backgroundColor: colors[seed]["background"] 
},{queue:false} 
); 
$(".container").animate({ 
    backgroundColor: colors[seed]["container"] 
    } 
); 
$("p, blockquote footer, .btn, a:link, a:visited, a:hover, a:active, a").animate({ 
    color: colors[seed]["font"] 
    } 
); 
+0

Das funktioniert perfekt. Vielen Dank für die Lösung und Erklärung! –

Verwandte Themen