template

Index :: Javascript :: Menü :: Navigations-Tabs ( Demo)

Navigations-Tabs haben Ähnlichkeit mit einer Menüzeile.
Jeder Tab-Reiter bewirkt das Laden einer Seite. Damit dieses Zieldokument weiss, welcher der Tabs aktiv ist, wird der Tab-Index als URL-Parameter tbs übergeben.

Der verwendete Javascript-Code im Header benötigt zum Aufbau eine Arraystruktur, in der Icons, Titel, Tooltiptexts und Verweisziele definiert sind (im Sourcecode blau gekennzeichnet).

Ein Tab-Reiter hat folgende Struktur:
[ Icon, Tabtitel, Tooltiptext, Verweisziel ]

Das Layout (transparent, für getönte Hintergründe) benutzt diese Grafiken:
tbs00.gif tbs0.gif tbs01.gif tbs10.gif tbs1.gif tbs11.gif

Durch das Anklicken eines Tabs wird die Funktion tbsCli() aufgerufen. In ihrem Parameter i wird dabei der Index [0...N-1] des Tabs übermittelt. Hier könnte man per switch-Block detaillierte Aktionen durchführen. Im vorliegenden Beispiel wird jedoch nur eine (gemäß Struktur vorgegebene) Zieladresse geladen.
CSS im Header
TD.tbs0 { PADDING:7 0 1 0; BACKGROUND:url(img/tbs0.gif); } TD.tbs00 { PADDING:7 3 1 0; BACKGROUND:url(img/tbs0.gif); } TD.tbs01 { PADDING:7 0 1 3; BACKGROUND:url(img/tbs0.gif); } TD.tbs1 { PADDING:3 0 5 0; BACKGROUND:url(img/tbs1.gif); } TD.tbs { FONT:14px arial,verdana,helvetica,sans-serif; } TD.tbsx { FONT:bold 14px arial,verdana,helvetica,sans-serif; }
Javascript im Header
var tbsData=[ ['img/tbsInbox.gif','Eingang','Empfangene Nachrichten lesen','tabs.html?tbs=0'], ['img/tbsEdit.gif','Schreiben','Neue Nachricht verfassen','tabs.html?tbs=1'], ['img/tbsSent.gif','Gesendet','Versendete Nachrichten lesen','tabs.html?tbs=2'], ['img/tbsTrash.gif','Gel&ouml;scht','Papierkorb pr&uuml;fen','tabs.html?tbs=3'], ['img/tbsInfo.gif','Info','Hilfe/Infos','tabs.html?tbs=4'], ['img/tbsLove.gif','Liebe','Liebe machen','tabs.html?tbs=5'], ['','Anhang','Anhang pr&uuml;fen','tabs.html?tbs=6'] ],tbsN=tbsData.length; function tbsHi(o) { o.style.backgroundColor='#E0E0E0'; } function tbsNo(o) { o.style.backgroundColor=''; } function tbsWrite() { var i,b,tbsi=0,a=URL_Params(window.location.href); if (a.length) tbsi=parseInt(a[0].value); $P("<table cellspacing='0' cellpadding='0'><tr><td><img src='img/i1Spc.gif' width='2' height='1'></td>"); for (i=0;i<tbsN;i++) { b=(i==tbsi); switch (i-tbsi) { case -1: a=['00','00','']; break; case 0: a=['10','1','11']; break; case 1: a=['','01','01']; break; default: a=['00','0','01']; } if (a[0].length) $P("<td background='img/tbs"+a[0]+".gif'><img src='img/i1Spc.gif' width='4' height='1'></td>"); $P("<td class='tbs"+a[1]+"'><table"+(b?"":" style='CURSOR:pointer'")+" cellspacing='0' cellpadding='0'><tr"); if (!b) $P(" onMouseover='tbsHi(this)' onMouseout='tbsNo(this)' onClick='tbsCli("+i+")'"); if (tbsData[i][2].length) $P(" title=' "+tbsData[i][2]+(b?"":"...")+" '>"); if (tbsData[i][0].length) $P("<td style='PADDING-RIGHT:3'><img src='"+tbsData[i][0]+"'></td>"); $P("<td class='tbs"+(b?"x":"")+"'>"+tbsData[i][1]+"</td></tr></table></td>"); if (a[2].length) $P("<td background='img/tbs"+a[2]+".gif'><img src='img/i1Spc.gif' width='4' height='1'></td>"); } $P("<td width='100%'><img src='img/i1Spc.gif' width='2' height='1'></td></tr><tr><td"); if (i=tbsi*3) $P(" colspan='"+i+"'"); $P(" bgcolor='#FFFFFF'></td><td colspan='3'><img src='img/i1Spc.gif' width='1' height='1'></td><td"); if (i=(tbsN-tbsi-1)*3) $P(" colspan='"+i+"'"); $P(" bgcolor='#FFFFFF'></td></tr></table>"); } function tbsCli(i) { self.location.href=tbsData[i][3]; } function $P(s) { document.write(s); } function URL_Params(url) { var ap,a=[],i=url.indexOf('?'); if (i<0) return a; var j=url.indexOf('#'); if (j<0) j=url.length; else if (j<i) return a; var s=url.substring(i+1,j); if (s.length<2) return a; ap=s.split('&'); for (i=j=0;i<ap.length;i++) { s=ap[i].split('='); if (s.length!=2) continue; if (!s[0].length) continue; a[j++]={name:unescape(s[0].replace(/\+/g,' ')),value:unescape(s[1].replace(/\+/g,' '))}; } return a; }
Im HTML-Code werden die Tabs dann mittels tbsWrite() eingefügt:
Javascript-Block im BODY:
<SCRIPT type='text/javascript'>tbsWrite();</SCRIPT>
... hier steht der eigentliche HTML-Seiteninhalt ..
CSS und Javascript sollten in externe Module ausgelagert werden, damit die Tabs zentral pflegbar sind und von jedem Unterdokument eingebunden werden können.

Index :: Javascript :: Menü


template