Du bist hier: Startseite > WebWissen > Javascript > Super Duper Hover Navi
Folge mir bei Twitter...

und bleibe auf dem Laufenden, was die Themen SEO und Webentwicklung angeht!

Donnerstag, 28. Mai 2009 um 17:21 Uhr

Super Duper Hover Navi mit Mootools

Mit Mootools lassen sich Überblendeffekte realisieren, welche die abrupten CSS-Hover-Effekte bei weitem übertreffen. Hier wird an einem Beispiel gezeigt, wie ein weicher Überblendeffekt mit Mootools programmiert wird.

 

So soll die Navi aus unserem Beispiel dann aussehen:

Der Vorteil

Der Vorteil von solchen Javascript-Effekten gegenüber Flash liegt klar auf der Hand: Im Quelltext ist im Gegensatz zu Flash der Text der einzelnen Navipunkte vorhanden, was für Suchmaschinen allgemein ziemlich gut ist.

Wie geht's?

Zuerst erstellen wir uns die Navigation in HTML. Wir verwenden hier exemplarisch eine unordered List, wie sie in den meisten Navigationen zum Einsatz kommt:

HTML

<ul id="navi">
    <li class="punkt">Punkt1</li>
    <li class="punkt">Punkt2</li>
    <li class="punkt">Punkt3</li>
</ul>

Wichtig ist hier schon einmal (für den späteren Gebrauch), dass das ul-Element eine id erhält.

CSS

Als Nächstes definieren wir das CSS für die einzelnen Navipunkte:

 .punkt { background:#FFD71F; color:#FFFFFF; cursor:pointer; display:block; float:left; margin-left:1px; padding:10px; }

Javascript

Jetzt kommt Mootools zum Einsatz. Übrigens: Man spricht das nicht Mowtohls sondern Muh tuhls.

Unser Skript regelt im Prinzip die Mouse-Events für Mouseover und Mouseout. Dann dann soll sich ja die Hintergrundfarbe des einzelnen Navipunktes verändern. So schaut das aus:

// Alles muss geladen sein
window.addEvent('domready', function() {
    
    // Die li-Elemente in einem Array speichern
    var array_punkte = $('navi').getChildren();
    
    // Das Array durchlaufen
    $each(array_punkte, function(punkt) {
    
            // Effekt definieren
            var myFx = new Fx.Tween(punkt, {duration:'long'});
            
            // Mouseover-Event für den Punkt
            punkt.addEvent('mouseover', function() {
                // Wenn der Mouseout-Effekt noch nicht zu Ende ist: abbrechen
                if(!myFx.complete())
                {
                    myFx.cancel();
                }
                myFx.start('background-color', '#6F88FF');
                
                // Mouseout-Event für den Punkt
                punkt.addEvent('mouseout', function() {
                    
                    // Wenn der Mouseover-Effekt noch nicht zu Ende ist: abbrechen
                    if(!myFx.complete())
                    {
                        myFx.cancel();
                    }
                    myFx.start('background-color', '#FFD71F');
                });
                
            });
    });
    
}); 

Zuerst prüfen wir, ob die gesamte DOM-Struktur bereits geladen ist (Zeile 2). Das sollte man standardmäßig immer so machen, wenn man vorhat, einzelne Elemente im DOM anzusprechen. Die müssen dann ja auch verfügbar sein, sonst gibt es eine unschöne Fehlermeldung.

Als Nächstes holen wir uns in Zeile 5 alle Kind-Elemente unseres ul-Elements. Hierfür benötigen wir die id 'navi', die wir ja in weiser Vorraussicht bereits zu Beginn definiert haben. Alle Kind-Elemente werden in einem Array gespeichert.

Nun durchlaufen wir dieses Array in Zeile 8 mit der Mootools-Funktion $each.

Der Überblend-Effekt wird in Zeile 11 definiert und als Option die duration long übergeben. Das ist der Zeitraum, über den sich der Effekt erstreckt.

Der Event-Handler für Mouseover für jeden einzelnen Punkt wird in Zeile 14 definiert. Hier soll sich dann die Farbe mit dem Effekt ändern.

Der Event-Handler für Mouseout für jeden einzelnen Punkt wird in Zeile 23 definiert. Hier soll sich die Farbe dann wieder auf den ursprünglichen Wert per Effekt ändern.

Wenn nun der User zu schnell mit seiner Maus aus einem Punkt herausfährt und dann gleich wieder hinein und der erste Überblend-Effekt noch nicht beendet ist, wird von Mootools versucht den zweiten zu starten, was aber nicht geht, denn der erste ist ja noch nicht fertig.

Das Resultat daraus ist, dass auf einmal kein Effekt mehr funktioniert und einfach gar nichts mehr passiert.

Deshalb müssen wir den Mouseout-Effekt abbrechen, sobald der Mouseover-Effekt wieder gestartet werden soll. Das machen wir in den Zeilen 16 - 19. Das Gleiche muss auch für den Fall gemacht werden, dass der Mouseout-Effekt gestartet werden soll, wenn der Mouseover-Effekt noch nicht beendet ist. Dies passiert in den Zeilen 26 - 29. 

Kommentare

avatar Julian Schrader
0
 
 
Schöner Effekt — aber JavaScript ist hier nicht nötig. Wenn man sich auf das Konzept „graceful degradation“ einlässt, definiert man das einfach als CSS3 Animation.

Safari und Firefox zeigen das dann bereits wie gewünscht an, in anderen — blöderen ;-) — Browsern ist es noch abrupt.
Montag 29 Juni 2009, 11:16
Antwort schreiben
Name *
Code   
ChronoComments by Joomla Professional Solutions
Kommentar abgeben
Cancel
Name *
Code   
ChronoComments by Joomla Professional Solutions
Kommentar abgeben

Tags

Javascript Hover Navigation  Javascript Mouseover  Mootools Hover  Mootools Navigation  Mootools Tween  

Tweets

Social Bookmarks

Über den Autor

Mein Name ist Axel Scheuering. Während meines Studiums (Wirtschaftsinformatik) habe ich meine Brötchen als Webentwickler verdient. Mmhh lecker Brötchen. Seit ich mit dem Studium fertig bin, arbeite ich hauptberuflich im Bereich Suchmaschinenoptimierung.

2009 habe ich bei der Google Online Marketing Challenge teilgenommen und mich zusammen mit meinem Team gegen über 2.000 Teams aus der gazen Welt durchgesetzt. Wir haben unter den "Final 15" weltweit den 2. Platz erreicht und dafür einen Marketingpreis erhalten :)

Diese Site betreibe ich nicht mehr aktiv weiter. Mein neues Blog findest du unter Methode-Web.de

Inhalte dort sind Webentwicklung, Suchmaschinenoptimierung, das Web allgemein und Literaturtipps.