Tooltips in Javascript – Tutorial

11
Mai

Wie man merkt, finde ich immer mehr Gefallen an Javascript. Darum hier auch ein Tutorial zum Thema “Tooltips in Javascript”. Tooltips sind kleine Boxen die erscheinen wenn der User mit der Maus über ein Objekt fährt. In ihnen kann man zum Beispiel den Linkzielort oder sonstige Infos angeben.

Voraussetzungen:

  • Basis HTML & CSS Kenntnisse
  • Basis  Javascript Kenntnisse

Lernziele:

  • Browserweiche
  • Mausposition abfragen
  • Div-Container dynamisch mit Text füllen

Vorschau

In Grundaufbau funktioniert das Script folgendermassen:

Wenn der Benutzer über einen Link oder ein Bild fährt wird ein Javascript aufgerufen, welches den Div Container an die richtige Position setzt und mit Text füllt.

Zuerst brauchen wir etwas CSS:


Wichtig sind dabei die Angaben position: absolute und z-index: 1 mit ihnen geben wir einerseits an, dass sich die Position nicht relativ zu den anderen Objekten verhalten soll und dass sich das Ganze über dem sonstigen Inhalt platzieren soll.

Nun kommt unser Javascript:



Wir haben vier Funktionen. Nun aber jede Funktion für sich erklärt:

function tagTip(text):
Mit dieser Funktion rufen wir unser Tooltip Script auf. Nun greifen wir mit document.getElementById(‘block’) auf unseren Div-Container zu und ändern die CSS Eigenschaft “display” zu “block”. Das heisst der Div-Container wird nun angezeigt. Mit innerHTML können wir Text in den Container schreiben. Dazu brauchen wir unsere Variable text die als Parameter übergeben wird.. Zusätzlich setzen wir die Variable “drag” auf true. Diese Variable brauchen wir später um zu bestimmen ob sich der Div Container zur Mausposition bewegen soll oder nicht. Nun kommt die Browserweiche. Da der Internet Explorer sich wieder einmal nicht an die Regeln hält müssen wir zuerst feststellen, ob es sich um den Internetexplorer handelt oder nicht. Mit if (!document.all) erreichen wir das, denn wenn das Script im Internet Explorer ausgeführt wird, liefert diese Anweisung true zurück, wenn nicht false. Das Ausrufezeichen sagt, dass das Script in der If-Anweisung nur ausgeführt wird wenn der Wert = false ist also das Script nicht im Internet Explorer ausgeführt wird.

Mit window.onmousemove=showitMOZ bewirken wir, dass immer wenn der onmousemove-Event eintrifft unsere Funktion showitMOZ ausgeführt wird. Schlussendlich das Ganze noch für den IE: document.onmousmove=showit nur das eben da die andere Funktion aufgerufen wird.

function showit():
Zuerst prüfen wir ob die Variable drag gleich true ist. Diese Abfrage brauchen wir, damit der Tooltip nicht immer angezeigt wird. Dann wird über die Style Eigenschaft und event.x bzw. event.x die x- und y-Position gesetzt. Hier addieren wir noch zusätzlich 5 Pixel hinzu für eine schönere Anzeige des Toolips. Diese Funktion wird über unsere Browserweiche nur im Internet Explorer ausgeführt!

function showitMOZ(e):
Nun kommt noch unsere Funktion für alle anderen Browser. Hierbei wird noch der Parameter “e” übermittelt. Ihn ihm wird der Event gespeichert, den brauchen wir um die x- und y-Position zu ermitteln. Dies machen wir dann auch mit “e.pageX” und “e.pageY“. Zusätzlich fügen wir für eine schönere Darstellung noch 5 Pixel hinzu (sonst flackert der Tooltip) da wir dies ja dann über CSS zuweisen brauchen wir noch das “px” damit das auch CSS konform wird. Dies fügen wir einfach mit einem Additionszeichen hinzu.

function unTip():
Schliesslich noch eine Funktion, die die Variable drag auf false setzt und so verhindert, dass der Tooltip weiter angezeigt wird.

Das wärs auch schon! Nun müssen wir nur noch in HTML einen Link, ein Bild oder sonst ein HTML Element erstellen und dort folgendes kleine Stück Code hinzufügen: onmouseover=”tagTip(‘Hier kommt der Tooltip Text’)” onmouseout=”unTip()”

Damit bewirken wir, dass wenn der Benutzer mit der Maus darüber fährt, der Tooltip aufgerufen wird und beim Verlassen wieder verschwindet.

Nun muss nur noch der Div-Container irgendwo im Code verankert werden.

Hier noch einige Anwendungsbeispiele:

TagTip Here

')" onmouseout="unTip()" href="#">TagTip Here

Experimentiert ein bisschen damit rum, es ist zum Beispiel auch möglich mit diesem Prinzip auch ganze Bilder als Tooltip anzuzeigen. Dabei einfach den <img> Tag in den Tooltip Funktionsaufruf schreiben.

Zusatz:

Fügen wir dem CSS Code des Tooltips noch folgende Zeilen hinzu, können wir den Tooltip sogar transparent anzeigen:

filter:alpha(opacity=50); /* IE */
-moz-opacity: 0.50; /* Gecko */
opacity: 0.50; /* Opera */

Vielen Dank fürs Lesen und Fragen, Kritk und Wünsche bitte in die Comments

MFG
Michael

VN:F [1.0.8_357]
Rating: 4.6/5 (10 votes cast)

There are 5 comments in this article:

  1. 31/05/2009Denny Mehner says:

    ich hab ein problem.

    ich wollt einfach nur ein divcontainer, meinem html-projekt, machen und wollte ihn (mit position: absolute top: xx left: xx) positionieren und das er im vordergrund steht.

    ich hab schon tausend seiten besucht, aber keine lösung gefunden.

    auch als ich es von selfhtml o. ä. direkt kopiert hab klappte alles nicht.

    kannst du mir da helfen?

  2. 2/06/2009admin says:

    Guten Tag,

    Kannst du mir vielleicht die Adresse deiner Seite geben, damit ich mir den Quellcode einmal ansehen kann? Denn ohne eine genauere Beschreibung deines Problems, kann ich dir leider nicht helfen.

    Sonst füge mal bei deinem Tooltip: “z-index: 1;” hinzu.. Vielleicht hilft das.

    MFG

  3. 6/10/2009Anonymous says:

    [...] [...]

  4. 28/08/2010Cero says:

    Tolles Script !!!
    aber alles kann man besser machen.
    1. var arrayname= new Array (‘1.Text’,'2.Text’, usw); im Javascript hinzufügen
    2. in der function tagTip(nr) als 1. Zeile “var text = arrayname[nr];” hinzufügen
    Wenn Du dann statt dem Text bei onmouseover ein Zahl von 0 bis ende Array übergibst kannst Du so für alle Links die Gleiche Funktion nutzen und musst nicht immer Text eingeben denn der steht ja im array und kann beliebig oft verwendet werden.
    Nur so als verbesserungsvorschlag
    Trotzdem THX für das Script
    Gruß, Cero

  5. 28/09/2010admin says:

    @Cero: vielen Dank für deine Antwort! Natürlich, grundsätzlich ist ein Script nie perfekt und Dein Lösungsansatz mit dem Array ist ein interessanter Gedanke, jedoch ist dies von User zu User unterschiedlich, ich wollte das Script so dynamisch wie möglich halten, und was genau der User dann übermittelt (anstatt den Text kann man ja auch dort dann den Wert es Arrays arrayname[1] übermitteln…), wollte ich möglichst offen lassen. Danke trotzdem für den interessanten Denkansatz!

Write a comment: