[Beschreibung]
Eine etwas andere Art der Menuführung.
[Kompatibilität]
[Code]
<style type="text/css"> .dot { position: absolute; width: 6; height: 6; visibility: hidden; background-color: red; font-size: 1px; cursor: pointer; cursor: hand; z-index: 100 } .dotoff { position: absolute; width: 6; height: 6; visibility: hidden; background-color: gray; font-size: 1px; cursor:default; z-index: 100} .dotempty { position: absolute; width: 6; height: 6; visibility: hidden; background-color: orange; font-size: 1px; cursor: pointer; cursor: hand; zindex: 100 } .caption { position: absolute; visibility: hidden; font-family: Tahoma; color: black; font-size: 11px; text-align: Center; cursor: default; z-index: 1 }
body { margin: 0px; background-color: white; } a { color: silver; text-decoration: none } p { font-size: 10px; font-family: tahoma; color: black } </style>
language="JavaScript" type="text/javascript"> /********************************************************************************** DotMenu * Copyright (C) 2001 <a href="/dhtmlcentral/dan_pupius.asp">Dan Pupius</a> * This script was released at DHTMLCentral.com * Visit for more great scripts! * This may be used and changed freely as long as this msg is intact! * We will also appreciate any links you could give us. * * Made by <a href="/dhtmlcentral/dan_pupius.asp">Dan Pupius</a> *********************************************************************************/
function lib_bwcheck(){ //Browsercheck (needed) this.ver=navigator.appVersion this.agent=navigator.userAgent this.dom=document.getElementById?1:0 this.opera5=this.agent.indexOf("Opera 5")>-1 this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0; this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0; this.ie4=(document.all && !this.dom && !this.opera5)?1:0; this.ie=this.ie4||this.ie5||this.ie6 this.mac=this.agent.indexOf("Mac")>-1 this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0; this.ns4=(document.layers && !this.dom)?1:0; this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera5) return this } var bw=new lib_bwcheck()
// The code of this script is in the body, the browsercheck above is not used. </script>
<script language="javascript1.2" type="text/javascript"> <!-- // DotMenu // provides cross-browser functionality //====================================== function getObjectRef(name) {
if(document.getElementById) return document.getElementById(name);
else if(document.all) return document.all[name];
else return null; }
// general functions to assist the script //======================================== function show(name) {
var el = getObjectRef(name);
if(el) el.style.visibility = "visible"; } function hide(name) {
if(el) el.style.visibility = "hidden"; } function getWidth(name) {
return el.offsetWidth; } function getHeight(name) {
return el.offsetHeight; } function moveMe(name,x,y) {
if(el) { el.style.top = parseInt(y); el.style.left = parseInt(x); } } function moveBy(name,x,y) {
if(el) { el.style.top = parseInt(el.style.top) + parseInt(y); el.style.left = parseInt(el.style.left) + parseInt(x); } }
// Creates the menu objects //========================== var menuCount = 0; function menuObject(name,x,y,caption, r, parent) {
if ( (!document.getElementById&&!document.all) || navigator.userAgent.indexOf("Opera")>-1) return;
document.write('<div id="divDot' + menuCount + '" class="dotempty" style="top: ' + y + '; left: ' + x + '"></div>');
document.write('<div id="divCap' + menuCount + '" class="caption" style="top: 0; left: 0">' + caption + '</div>');
this.name = name;
this.parent = parent
this.ref = "divDot" + menuCount;
this.caption = "divCap" + menuCount
if(r) this.radius = r;
else this.radius = 400;
this.subMenus = new Array();
this.state = 0;
this.moving = false;
if(this.parent) this.action = "null";
else this.action = "toggle";
if(this.parent) this.startAngle = parent.startAngle;
else this.startAngle = 0;
getObjectRef(this.ref).objRef = this.name;
this.show = function() { show(this.ref); }
this.hide = function() { hide(this.ref); }
this.moveMe = function(x,y) { if(this.parent) { x += this.parent.x(); y += this.parent.y(); } moveMe(this.ref,x,y); }
this.moveBy = function(x,y) { moveBy(this.ref,x,y); }
this.x = function() { return parseInt(getObjectRef(this.ref).style.left); }
this.y = function() { return parseInt(getObjectRef(this.ref).style.top); }
this.w = function() { return getWidth(this.ref); }
this.h = function() { return getHeight(this.ref); }
this.showCaption = function() { moveMe(this.caption, this.x() - (getWidth(this.caption)/2) + (this.w()/2), (this.y() + this.h())); show(this.caption);
}
this.hideCaption = function() { hide(this.caption);
this.setCaption = function(c) { getObjectRef(this.caption).innerHTML = c;}
this.addItem = function(c,action,r) { getObjectRef(this.ref).className = "dot"; if(!r) r = this.radius/2; var sub = new menuObject(this.name + ".subMenus[" + this.subMenus.length + "]",0,0,c,r,this); sub.parent = this; sub.action = action; sub.moveMe(0,0); this.subMenus[this.subMenus.length] = sub; return sub;
this.expand = function() { if(this.subMenus.length > 0) { var p = true; if(this.parent) { p = !this.parent.moving; for(var i=0; i<this.parent.subMenus.length;i++) p = p && ((this.parent.subMenus[i].state==0) || (this.parent.subMenus[i].state==this.parent.subMenus[i].subMenus.length)) && (this.parent.subMenus[i].moving==false); } else var o = false;
if((!this.parent || this.parent.state == this.parent.subMenus.length) && p) { if(this.parent) this.collapseAll(this.name);
var diff = 360 / this.subMenus.length; for(var i=0;i<this.subMenus.length;i++){ this.subMenus[i].moveMe(0,0); this.subMenus[i].show(); this.moving = true; this.subMenus[i].slide(this.subMenus[i].radius * cos(degToRad((diff*i)+this.startAngle)), this.subMenus[i].radius * sin(degToRad((diff*i)+this.startAngle)), this.name + ".subMenus[" + i + "].showCaption();" + this.name + ".moving=false;" + this.name + ".state+=1;"); } if(this.parent){ getObjectRef(this.parent.ref).style.filter = "alpha (opacity=33)"; getObjectRef(this.parent.ref).style.MozOpacity = "33%";
getObjectRef(this.parent.ref).className = "dotoff"; getObjectRef(this.parent.caption).style.filter = "alpha (opacity=33)"; getObjectRef(this.parent.caption).style.MozOpacity = "33%"; for(i=0;i<this.parent.subMenus.length;i++) { getObjectRef(this.parent.subMenus[i].ref).style.filter = "alpha (opacity=66)"; getObjectRef(this.parent.subMenus[i].ref).style.MozOpacity = "66%"; getObjectRef(this.parent.subMenus[i].caption).style.filter = "alpha (opacity=66)"; getObjectRef(this.parent.subMenus[i].caption).style.MozOpacity = "66%"; } if(this.parent.parent) { for(i=0;i<this.parent.parent.subMenus.length;i++) { getObjectRef(this.parent.parent.subMenus[i].ref).style.filter = "alpha (opacity=33)"; getObjectRef(this.parent.parent.subMenus[i].ref).style.MozOpacity = "33%"; getObjectRef(this.parent.parent.subMenus[i].ref).className = "dotoff"; getObjectRef(this.parent.parent.subMenus[i].caption).style.filter = "alpha (opacity=33)"; getObjectRef(this.parent.parent.subMenus[i].caption).style.MozOpacity = "33%"; } getObjectRef(this.parent.parent.ref).style.MozOpacity = "33%"; getObjectRef(this.parent.parent.ref).style.MozOpacity = "33%"; getObjectRef(this.parent.parent.ref).className = "dotoff"; } } getObjectRef(this.ref).style.filter = "alpha (opacity=66)"; getObjectRef(this.caption).style.filter = "alpha (opacity=66)"; getObjectRef(this.ref).style.MozOpacity = "66%"; getObjectRef(this.caption).style.MozOpacity = "66%"; } }
this.collapse = function() { var p = true; p = !this.moving; for(var i=0; i<this.subMenus.length;i++) p = p && (this.subMenus[i].state==0) && (this.subMenus[i].moving==false);
if(p && this.subMenus.length > 0) { for(var i=0;i<this.subMenus.length;i++){ this.subMenus[i].hideCaption(); this.moving = true; this.subMenus[i].slide(0, 0, this.name + ".subMenus[" + i + "].hide();" + this.name + ".moving=false;" + this.name + ".state-=1;"); } if(this.parent){ getObjectRef(this.parent.ref).style.filter = "alpha (opacity=66)"; getObjectRef(this.parent.ref).style.MozOpacity = "66%"; if(this.parent.subMenus.length != 0) getObjectRef(this.parent.ref).className = "dot"; else getObjectRef(this.parent.ref).className = "dotempty"; getObjectRef(this.parent.caption).style.filter = "alpha (opacity=66)"; getObjectRef(this.parent.caption).style.MozOpacity = "66%"; for(i=0;i<this.parent.subMenus.length;i++) { getObjectRef(this.parent.subMenus[i].ref).style.filter = "alpha (opacity=100)"; getObjectRef(this.parent.subMenus[i].ref).style.MozOpacity = "100%"; if(this.parent.subMenus[i].subMenus.length != 0) getObjectRef(this.parent.subMenus[i].ref).className = "dot"; else getObjectRef(this.parent.subMenus[i].ref).className = "dotempty"; getObjectRef(this.parent.subMenus[i].caption).style.filter = "alpha (opacity=100)"; getObjectRef(this.parent.subMenus[i].caption).style.MozOpacity = "100%"; } if(this.parent.parent) { for(i=0;i<this.parent.parent.subMenus.length;i++) { getObjectRef(this.parent.parent.subMenus[i].ref).style.filter = "alpha (opacity=66)"; getObjectRef(this.parent.parent.subMenus[i].ref).style.MozOpacity = "66%"; if(this.parent.parent.subMenus[i].subMenus.length != 0) getObjectRef(this.parent.parent.subMenus[i].ref).className = "dot"; else getObjectRef(this.parent.parent.subMenus[i].ref).className = "dotempty"; getObjectRef(this.parent.parent.subMenus[i].caption).style.filter = "alpha (opacity=66)"; getObjectRef(this.parent.parent.subMenus[i].caption).style.MozOpacity = "66%"; } } } getObjectRef(this.ref).style.filter = "alpha (opacity=100)"; getObjectRef(this.caption).style.filter = "alpha (opacity=100)"; getObjectRef(this.ref).style.MozOpacity = "100%"; getObjectRef(this.caption).style.MozOpacity = "100%"; }
this.collapseAll = function(except) { for(var i=0;i<this.parent.subMenus.length;i++) { if(this.parent.subMenus[i].name!=except && this.parent.subMenus[i].state==this.parent.subMenus[i].subMenus.length) { this.parent.subMenus[i].collapse(); } }
this.toggle = function(e) { if(document.all) id = window.event.srcElement; else id = e.target; var dot = eval(id.objRef);
if(dot.state==0 && !dot.moving) dot.expand(); else if(dot.state==dot.subMenus.length && !dot.moving) dot.collapse()
this.doAction = function(e) { if(document.all) id = window.event.srcElement; else id = e.target; var dot = eval(id.objRef);
if(dot.action == "toggle") dot.toggle(e); else eval(dot.action);
//change these if you want to change the events that trigger the actions //======================================================================== //getObjectRef(this.ref).onmousemove = this.toggle;
getObjectRef(this.ref).onmouseup = this.doAction;
this.slide = function(xx,yy,func) { if(!func) func = ""; var px = this.parent.x(); var py = this.parent.y();
var x = xx - this.x() + px; var y = yy - this.y() + py;
var d = sqrt(square(xx-this.x() + px) + square(yy-this.y() + py));
var v = d/8; if(v<1) v = 1;
if( (Math.abs(x) < v) && (Math.abs(y) < v) ) { moveMe(this.ref,xx + px,yy + py); if(func != "") eval(func); } else { var a = round(atan(x,y)); dx = round(v * cos(degToRad(a))); dy = round(v * sin(degToRad(a)));
this.moveBy(dx,dy); setTimeout(this.name + ".slide(" + xx + "," + yy + ", '" + func + "');",10); }
} // Preoading the windows filters.
if (menuCount==0 && document.all) document.all[this.ref].style.filter = "alpha (opacity=100)";
menuCount++;
return this; }
// Math functions //================ var pi = Math.PI; function square(x) { return (x*x); } function sqrt(x) { return Math.sqrt(x); } function round(x) { return Math.round(x); } function rand(x,y) { return (round(Math.random()*(y-x)) + x); }
function cos(x) { return Math.cos(x) } function sin(x) { return Math.sin(x) }
function degToRad(x) { return ( x/(360/(2*pi)) ); } function radToDeg(x) { return ( x*(360/(2*pi)) ); }
function atan(s,t) {
if( s == 0.0 && t > 0.0) angle = 90.0;
else if(s == 0.0 && t < 0.0) angle = 270.0;
else if (s < 0.0 ) angle = 180.0 + radToDeg(Math.atan(t/s));
else if (s > 0.0 && t < 0.0) angle = 360.0 + radToDeg(Math.atan(t/s));
else { if(s==0.0) s=0.00001; angle = radToDeg(Math.atan(t/s));
if(angle < 0.0) angle += 360.0;
return angle; }
//==================================================================================== // make the menus and provide information on usage //==================================================================================== // // Um das Menu Ihren Vorstellungen entsprechend anzupassen, gehen Sie folgendermassen vor: // - Editieren Sie die Styles .dot, .dotoff und .caption // - Fügen Sie das main menu mit folgendem Code hinzu // var [menu_name] = new menuObject("[menu_name]", [x position], [y position], [caption], [spacing between sub menus]); // - Fügen Sie die Submenus hinzu: // var [sub_menu] = [menu_name].addItem([caption],[action],[spacing]); // ODER // var [sub-sub_menu] = [sub_menu].addItem([caption],[action],[spacing]); // ODER // [menu_name].subMenus[x].addItem([caption],[action],[spacing]); // // - wobei action ein String ist, der evaluiert wird, wenn ein Punkt angeklickt wird // // (NOTE spacing ist optional und entspricht, wenn leer gelassen dem (parent's value)/2 - der Defaultwert für // das main menu item ist 400) // // - Nachfolgend Extras: // + menuItem.show() - zeigt Menupunkt an // + menuItem.showCaption() - zeigt Menu's Caption an // + menuItem.hide() // + menuItem.hideCaption() // + menuItem.startAngle = x - Default ist 0 Grad, was bedeutet, dass das erste Submenu // direkt rechts, die nachfolgenden Items im Uhrzeigersinn angezeigt werden // + menuItem.setCaption("text") - erlaubt, den Menutext (Caption) zu ändern // + menuItem.expand() - öffnet Submenus (wenn vorhanden) // + menuItem.collapse() - schliesst ein SubItem (wenn eines geöffnet ist) // // + menuItem.moveMe(x,y) - bewegt Menu zu den Koordinaten (x,y) // + menuItem.moveBy(x,y) - bewegt ein Menu um (x,y)-Pixels // + menuItem.x() & menuItem.y() - retrieve a menus coordinates // //====================================================================================
//get dimentions of the page if(document.all) pageWidth = document.body.offsetWidth-20; else pageWidth = innerWidth; if(document.all) pageHeight = document.body.offsetHeight-4; else pageHeight = innerHeight;
//Create main menu var menu = new menuObject("menu",pageWidth/2,pageHeight/2,"Nightfire Site Map",pageHeight/2); menu.startAngle = -90;
//show menu and caption menu.show(); menu.showCaption();
//Add submenus menu.addItem("News","window.open('/news')"); menu.addItem("Scripts","toggle"); menu.addItem("Tutorials","toggle"); menu.addItem("Forums","toggle"); menu.addItem("Resources","toggle");
menu.subMenus[1].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[1].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[1].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[1].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[1].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[1].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[1].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[1].addItem("Beispielseite","window.open('dummy.htm')");
menu.subMenus[2].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[2].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[2].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[2].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[2].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[2].addItem("Beispielseite","window.open('dummy.htm')");
menu.subMenus[3].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[3].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[3].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[3].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[3].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[3].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[3].addItem("Beispielseite","window.open('dummy.htm')");
c = menu.subMenus[4].addItem("Cool Sites","toggle"); c.startAngle = 15; menu.subMenus[4].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[4].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[4].addItem("Beispielseite","window.open('dummy.htm')");
menu.subMenus[4].subMenus[0].addItem(""Beispielseite","window.open('dummy.htm')"); menu.subMenus[4].subMenus[0].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[4].subMenus[0].addItem("Beispielseite","window.open('dummy.htm')");
menu.subMenus[4].subMenus[3].addItem("Beispielseite","window.open('dummy.htm')"); menu.subMenus[4].subMenus[3].addItem("Beispielseite","window.open('dummy.htm')");
//--></script>
DHTMLCentral.com
Kopieren Sie bitte den Code