Javascript

Javascript-Tooltips einsetzen

Interaktiv Informationen auf einer Web-Seite anzeigen

Gerade auf Gebäudegrundrissen und ähnlichen Bildern ist es manchmal etwas schwer alle Informationen unterzubringen. Besser und schicker ist es da mit dem Benutzer zu interagieren und ihm einen Tooltip mit allen Informationen anzuzeigen, sobald er mit dem Mauszeigen einen bestimmten Bereich berührt.

Zu diesem Zweck nehmen wir das Bild des Grundrisses und legen eine sog. Image-Map darüber. In Microsoft Frontpage z.B. müssen Sie dazu lediglich das in die Seite eingefügte Bild markieren und über die "Bilder"-Symbolleiste sog. Hotspots zeichnen. Am besten eignen sich hierfür polygone Hotspots.

Die Definition der Test-Image-Map in diesem Artikel:

<map name="mapTest">
<area shape="polygon" coords="32, 17, 95, 17, 97, 68, 33, 70">
<area shape="polygon" coords="33, 73, 76, 70, 77, 103, 34, 104">
<area shape="polygon" coords="77, 71, 95, 70, 96, 123, 77, 124">
<area shape="polygon" coords="44, 106, 76, 105, 76, 125, 44, 125">
<area shape="polygon" coords="43, 124, 95, 124, 96, 175, 42, 174">
<area shape="polygon" coords="11, 176, 96, 176, 95, 283, 13, 284">
<area shape="polygon" coords="96, 17, 129, 16, 130, 41, 96, 42">
<area shape="polygon" coords="129, 16, 162, 16, 161, 43, 129, 42">
<area shape="polygon" coords="95, 44, 160, 43, 160, 108, 96, 109">
<area shape="polygon" coords="95, 110, 160, 109, 160, 156, 97, 157">
<area shape="polygon" coords="97, 158, 159, 158, 160, 206, 97, 207">
<area shape="polygon" coords="97, 209, 160, 207, 162, 284, 99, 286">
</map>

Man nennt diese Image-Maps auch "verweis-sensitive Grafiken", da man jedem definierten Bereich eine Ziel-URL zuweisen kann. In unserem Fall benötigen wir jedoch keine Sprungmarke, sondern begnügen uns mit dem Zeichen # als Ziel-String, was dazu führt, dass bei einem Klick lediglich an den Anfang der Seite zurückgesprungen wird. Zudem erhält jede AREA einen eindeutigen ID-Wert:

<area ... href="#" id="1" ... >
<area ... href="#" id="2" ... >
...

Die Verknüpfung der Image-Map an das Bild geschieht durch den IMG-Parameter USEMAP:

<img border="0" src="images/test.gif" usemap="#mapTest">

Nun müssen wir als nächstes definieren was bei einer Mausbewegung über einen der Bereiche angezeigt werden soll. Hierzu definieren wir für jede Bereichsinformation ein DIV mit zwei untergeordneten DIV's (Kopfzeile und Inhalt) und geben ihm eine eindeutige ID, die mit der in der Image-Map korrespondiert:

<div class="tooltip" style="width: 200px;" id="d1">
  <div class="head">Schlafzimmer</div>
  <div class="content">13,47 qm</div>
</div>
...

Am sinnvollsten werden die DIV's im unteren Teil des HTML-Codes angelegt, denn sie sind zum einen zunächst nicht sichtbar und zum anderen später auch nicht dort wo sie definiert sind, denn die Position ist später abhängig vom Maus-Cursor. Um das Ganze etwas aufzuhübschen legen wir im HEAD für die einzelnen DIV's CSS-Formatierungen an:

<style><!--
.tooltip {
  font-size: 10pt;
  position: absolute;
  display: none;
  background-color: #EDECF4;
  border-width: 1px;
  border-style: solid;
  border-color: #E2860E; }

.tooltip .head {
  font-weight: bold;
  background-color: #E2860E;
  color: #EDECF4;
  padding: 2px; }

.tooltip .content {
  color: #666666;
  font-weight: bold;
  padding: 4px; }
--></style>

Mit dieser Basis können wir nun daran gehen die Interaktivität einzubauen. Hierzu dienen drei JavaScript-Funktionen, die dazu dienen einen Bereich einzublenden, ihn bei Bewegung der Maus mit dem Cursor mitzuführen und ihn beim Verlassen des Bereichs wieder auszublenden:

<script><!--
  tooltip = null;
  document.onmousemove = updateTooltip;

  function updateTooltip(e) {
    try {
      x = (document.all) ? window.event.x + document.documentElement.scrollLeft: e.pageX;
      y = (document.all) ? window.event.y + document.documentElement.scrollTop: e.pageY;
      if (tooltip != null) {
        tooltip.style.left = (x + 20) + "px";
        tooltip.style.top = (y + 20) + "px";
      }
    } catch (error) { error=null; }
  }

  function showTooltip(id) {
    try {
      tooltip = document.getElementById(id);
      tooltip.style.display = "block"
    } catch (error) { error=null; }
  }

  function hideTooltip() {
    try {
      tooltip.style.display = "none";
    } catch (error) { error=null; }
  }
//--></script>

Die Funktionen werden abschließend in die Ereignisse OnMouseOver und OnMouseOut der einzelnen Image-Map-Bereiche eingetragen:

<area ... onmouseover="showTooltip('d1')" onmouseout="hideTooltip()"
... >
<area ... onmouseover="showTooltip('d2')" onmouseout="hideTooltip()" ...
>
...
Schlafzimmer
13,47 qm
Bad
5,87 qm
Flur
3,85 qm
WC
2,77 qm
Eingang
10,40 qm
Wohnzimmer
35,00 qm
WC
2,85 qm
Balkon
3,40 qm
Schlafzimmer
15,99 qm
Schlafzimmer
11,70 qm
Küche
13,47 qm
Balkon
12,42 qm
kick it on dotnet-kicks.de AddThis Trackback-Url...

Schlagworte

12 Kommentare bislang...

  • Gruß!

    Tja, zwar ein super ToolTip, doch was passiert denn da mit dem ToolTip wenn man zu dicht an den Browser-Rand kommt.
    Dann wars das mit dem TIP. Es ferschwindet!

    Schade!!! Hätte mich mal über ein richtig guten ToolTip gefreut.

    Ciao!
    7
    Cem : Mittwoch, 17. Mai 2006 17:43
  • Das ist hier ein gelunges Beispiel von Nützlichkeit mit Technik. So etwas kann Schranken der Computerwelt niedereißen.
    6
    Rüdiger N. : Samstag, 29. April 2006 18:19
  • Syntaxfehler. Ich nehme alles zuvor Gesagte zurück!
    5
    sheaulle : Montag, 27. März 2006 02:01
  • Das Script ist super!

    Leider taucht bei mir ein Problem auf: Auf meiner Seite funktionieren immer nur zwölf Hotspots (also DIV-Bereiche), ab dem 13. wird dieser nicht eingeblendet. Das Verhalten tritt auf verschiedenen Browsern auf (Opera, IE und Firefox). Wenn man die DIVs vertauscht, funktionieren auch nur die ersten zwölf.

    Schöne Grüße
    4
    sheaulle : Montag, 27. März 2006 01:29
  • Das ganze war etwas schwierig, doch man glaubt es kaum: es funktioniert! Leider ist die Homepage noch nicht freigeschaltet, doch dies erfolgt in kürze. Nur soviel: Ich habe eine Landkarte der Schweiz mit 16 Hotspots bestückt und wollte, dass ein Fenster mit den Adressangaben erscheinen sollte. Zugleich noch ein link dass wenn man noch klickt auch noch ein neues Fenster aufgeht mit der hinterlegten URL. Habe 4 Stunden gebraucht, doch nun ist die Freude doppelt gross, dass es läuft. Freu mich auch einen Besuch auf meiner Hompage ab ca. mitte Februar 2006.
    3
    St. Hilber : Dienstag, 7. Februar 2006 23:43

Dein Kommentar hierzu...


Kommentar-Feed für diesen Beitrag
Gravatare werden unterstützt .:. eMail-Adressen werden nicht veröffentlicht
 

RSS-Feed

Die URL des Standard-Newsfeed von zerbit.de lautet:

http://www.zerbit.de/rssfeed.aspx

Login


 

 

Statistik



kürzlich kommentiert

  • Roland : 06.09.2010 13:15 @ OutlookSignature
    in der Facebook-Gruppe gibt es zumindest...
  • Roland : 06.09.2010 11:48 @ OutlookSignature
    Hallo, wir verwalten unsere Signaturen a...
  • Helmut : 05.09.2010 15:08 @ OutlookSignature
    Mir wird bei Outlook 2010 auch die Stand...
  • S. Doberstein : 31.08.2010 22:59 @ Der Ordner "MSOCache"
    Fortsetzung meines gestrigen Kommentares...
  • Steffen Doberstein : 30.08.2010 20:50 @ Der Ordner "MSOCache"
    Hallo! Ich fand die Idee mit dem Partiti...

Artikel 16

  • Datum: 24.03.2005
    Kategorie: Javascript
    Zugriffe: 4.770
    Kommentare: 12
    Trackbacks: 0

Letzte Beiträge

Kategorien

Buttons & More

Blog-Roll

Banner Piraten-Partei