Ihr Problem durch diesen Satz in der Dokumentation erklärt (fadeOut):
Wenn mehrere Elemente ani sind mattiert, ist es wichtig zu beachten, dass der Callback einmal pro übereinstimmendes Element ausgeführt wird, nicht einmal für die Animation als Ganzes.
Mit anderen Worten, weil Sie zwei Dinge animieren, wird der Rückruf zweimal aufgerufen. Da eine Ihrer divs bereits ausgeblendet ist, wird die fadeOut
sofort * abgeschlossen und ruft sofort zurück.
* Das sofortige Vervollständigen, wenn bereits gezeigt/ausgeblendet ist, ist einzigartig für die Hilfefunktionen zum Anzeigen/Verdecken. Wenn Sie eine eigene Überblendungs-Animation erstellen würden, würde dies unabhängig vom aktuellen Status immer die angegebene Zeit dauern.
Sie können dies auf verschiedene Arten beheben. Am einfachsten ist es, Kette Ihre fadeOut()
Anrufe innerhalb von einander, statt einer auf beiden Elemente aufrufen:
$('.icon_one').click(function() {
$('#image_two').fadeOut(function() {
$('#image_three').fadeOut(function() {
$('#image_one').fadeIn();
});
});
});
Weil man in der Regel bereits versteckt wird, wird es durch sofort fallen, aber der andere wird einige Zeit dauern. Wie auch immer, nur wenn beide abgeschlossen sind, wird das Einblenden stattfinden.
Demo:
<div id="image_one" class="imageBox" style="background-color:red;height:50px;width:50px"> </div>
<div id="image_two" class="imageBox" style="background-color:blue;height:50px;width:50px"> </div>
<div id="image_three" class="imageBox" style="background-color:yellow;height:50px;width:50px"> </div>
<div data-num="one" class="icon_show">Red</div>
<div data-num="two" class="icon_show">Blue</div>
<div data-num="three" class="icon_show">Yellow</div>
Script:
$('.icon_show').click(function() {
var showID = '#image_' + $(this).data('num');
$('.imageBox:visible').fadeOut(function() {
$(showID).fadeIn(400);
});
});
http://jsfiddle.net/jtbowden/XQnhs/
Natürlich mit einer wenig Änderung Ihrer HTML, Sie alle drei mit einem Click-Handler tun können Demo: http://jsfiddle.net/jtbowden/NAcPW/
Der Schlüssel ist, dass Sie automatisch anhand des Links, auf den Sie klicken, herausfinden, welcher angezeigt werden soll. In diesem Fall mache ich das, indem ich eine Zahl in einem Datenattribut ablege.Sie können auch nur einen Teil der ID verwenden, oder indem Sie den Offset mit index
ermitteln und diesen dann in eq
eingeben.
Demo: http://jsfiddle.net/jtbowden/NnN58/
Es gibt viele Möglichkeiten, um diesen Code zu vereinfachen.
Ich glaube nicht, dass die Platzierung des Div ist kein Problem, wenn er sein Animationsproblem gelöst – Falle1234
Das hat es geschafft. Danke, alle, für das Spielen! Ich musste auch mit einigen Elementen der Galerie herumspielen, aber es ist golden! Das heißt, mein jQuery ist _sehr_ grundlegend und könnte wahrscheinlich aufgeräumt werden, aber ich werde jetzt keinen schlafenden Hund treten. – Adam
@Adam, das verbirgt das Problem, es löst nicht wirklich, was wirklich los ist. Beachten Sie, dass Ihre ursprüngliche Farbe nicht zuerst ausgeblendet wird. Wenn Sie nun eine Überblendung wünschen, ist das ein anderes Problem. –