Erstelle ein CSS-Spritebild, wobei die obere und die untere Hälfte die beiden Bilder sind, zwischen denen du animieren möchtest. Das jQuery fügt ein <span>-Tag hinzu und weist die untere Hälfte des Spritebilds als Hintergrund zu. Wenn du mit der Maus darüber fährst und wieder weg, animiert sich der span zwischen vollständig transparent und vollständig opak, wodurch ein Bild in ein anderes überblendet.
HTML
<ul id="menu">
<li id="home"><a href="#">home</a></li>
<li id="about"><a href="#">about</a></li>
<li id="services"><a href="#">services</a></li>
<li id="contact"><a href="#">contact</a></li>
</ul>
CSS
ul#menu li a{float:left;display:block;background:url("images/menu.png") no-repeat;width:150px;text-indent:-9999px;height:50px}
ul#menu li#home a{background-position:0px 0px}
ul#menu li#about a{background-position:-150px 0px}
ul#menu li#services a{background-position:-300px 0px}
ul#menu li#contact a{background-position:-450px 0px}
ul#menu li a span {background:url("images/menu.png");height:50px;display:block}
ul#menu li#home a span{background-position:0px -50px}
ul#menu li#about a span{background-position:-150px -50px}
ul#menu li#services a span{background-position:-300px -50px}
ul#menu li#contact a span{background-position:-450px -50px}
jQuery
$(function() {
$("ul#menu li a").wrapInner("<span></span>");
$("ul#menu li a span").css({"opacity" : 0});
$("ul#menu li a").hover(function(){
$(this).children("span").animate({"opacity" : 1}, 400);
}, function(){
$(this).children("span").animate({"opacity" : 0}, 400);
});
});
Du kannst eine Demonstration hier: sehen
Die Demo hat das Problem mit dem Absprung in IE7,
funktioniert in FF ok
Al
funktioniert definitiv nicht mit IE6,
habe es aber mit einem JPG getestet und das funktioniert
unitpngfix funktioniert nicht mit background-position in IE6
Ich finde, dass es ein interessanter Effekt ist, wenn man mit der Maus über einen Link fährt
al
Ist der Link zur Referenz-URL defekt?
Al
Die Referenz-URL sollte jetzt funktionieren und das Absprungproblem in IE7 behoben sein – danke für den Hinweis, Leute
Außerdem, wie markiert man einen aktiven Zustand? Ich möchte, dass das Element hervorgehoben bleibt, sobald es ausgewählt ist.
Wende einen Klassennamen auf dieses Anker-Tag an
sieht in IE7 unter W7 immer noch komisch aus
Kann man das in einem vertikalen Menü machen?
Ja, kann man, ich habe es gemacht, es ist einfach
Wirklich toller Effekt. Ich habe einen dritten Zustand, der aktiv ist. Es funktioniert gut mit reinem CSS, aber wenn ich den aktiven Zustand mit diesem Effekt überfliege, erscheint der Hover-Zustand. Kann ich verhindern, dass dieser Effekt auf den aktuell aktiven ausgewählten Tab angewendet wird, während die normalen Tabs weiterhin zu Hover überblenden? Jede Hilfe wäre willkommen. Danke.
Ich weiß nicht, was ich falsch mache, aber ich kopiere und füge es auf meine Seite ein und es bekommt einen Winkel,
du kannst es hier sehen :(
http://www.strongerorg.com/OrganisationSite/SpriteTest.aspx
Ich denke, du solltest hier .stop().animate() verwenden, wenn du nicht möchtest, dass die Bilder nach mehreren Überfahrten flackern
Hallo,
In IE7 solltest du ein
ul#menu li {display: inline; }
definieren, sonst zeigt der Browser einen „Schritt“-Effekt (von links nach rechts absteigend). Mir ist mehrmals aufgefallen, dass IE7 Probleme mit display: block; hat, wenn es zum a-Selektor in horizontalen Listen hinzugefügt wird. Manchmal musste ich es sogar komplett entfernen, sonst hat der Browser die Liste nicht richtig angezeigt.
Hallo,
es funktioniert sehr gut, danke
aber wie kann ich es in meiner Webseite zentrieren?
Ich habe es mit einer DIV-Eigenschaft versucht, aber es hat nicht funktioniert…
Das ist alles sehr nett & ich sehe, dass es funktioniert – aber du erklärst nicht, wo der jQuery-Code platziert werden soll oder wie er mit der spezifischen Aufgabe verknüpft wird – es werden viel mehr Anweisungen benötigt.
Die Vorschauseite gibt mir eine Spyware-Warnung von meinem Antivirenprogramm
Hallo,
Ich habe Schwierigkeiten, die Navigationstasten auf dem geklickten Button aktiv zu halten. Alexandru Nastase (oben) erwähnte, eine className zum Anker hinzuzufügen, aber du hast es nicht weiter ausgeführt und ich kann es nicht herausfinden. Deshalb stelle ich die Frage. Wie lässt man den geklickten Button im Hover-Zustand bleiben, während die anderen Buttons in den normalen Link-Zustand zurückversetzt werden?
Ich habe alles an seinem Platz, aber das funktioniert überhaupt nicht.
Ist dieses Skript nur mit jquery-1.3.2.min.js kompatibel?
Die Seite, die ich einrichte, verwendet 1.7.1
Falls jemand auf dieses Problem stößt: Wenn man den Code von der Referenz-URL (http://charles-harvey.co.uk/plugins/animatedbackground/) kopiert, hat die zweite Zeile von jQuery, die den Span einfügt, ein Leerzeichen im ersten Span-Markup-Tag – was dazu führt, dass die Funktion nicht richtig funktioniert ;)