Pulldown Menu
maren
- javascript
0 Andreas-Lindig0 maren
0 Siggi
Hallo, bitte dringend um Hilfe!!
Ich benötige für eine Seite ein Pulldown Menu und habe nach einigen Recherchen auch eines gefunden, das ich einsetzen kann. Problem hierbei: Das Script ist so ausgelegt, dass jeder Menüpunkt Unterpunkte hat. Das ist aber bei meiner Site nicht der Fall, d.h. es kommt höchstens in zwei Fällen vor. Die anderen Menüpunkte sind ohne pulldown.
Bei folgender Programmierung bekomme ich aber immer Fehlermeldungen, wenn ich mit der Maus über die Menüpunkte ohne Pulldown fahre. Wer kennt die Lösung?
Vielen Dank Maren
<html> <head> <style> all.clsMenuItemNS, .clsMenuItemIE{text-decoration: none; font: normal 10pt Arial; color: 333399; cursor: hand; z-index:100} #MainTable A:hover {color: CC0033;} </style>
<script language="JavaScript">
//Top Nav Bar I v2- By Constantin Kuznetsov Jr. (script@esolutiononline.com)
var keepstatic=1 //specify whether menu should stay static 0=non static (works only in IE4+) var menucolor="#B3B8BB" //specify menu color var submenuwidth=250 //specify sub menus' color
</script>
<title>Welcome to Homepage</title> </head>
<body marginwidth="0" marginheight="0" leftmargin="0" topmargin="0">
<script language="JavaScript"> if (document.all) {n=0;ie=1;ns6=0;fShow="visible";fHide="hidden";} if (document.getElementById&&!document.all) {n=0;ie=0;ns6=1;fShow="visible";fHide="hidden";} if (document.layers) {n=1;ie=0;ns6=0;fShow="show";fHide="hide";}
//Top Nav bar script v2- http://www.dynamicdrive.com/dynamicindex1/sm/index.htm
opr6=ie&&navigator.userAgent.indexOf("Opera")!=-1
//window.onerror=new Function("return true") //////////////////////////////////////////////////////////////////////////// // Function Menu() // //////////////////////////////////////////////////////////////////////////// rightX = 0; function Menu() { this.bgColor = menucolor; if (ie) this.menuFont = "normal 10pt Arial"; if (n) this.menuFont = "normal 10pt Arial"; this.fontColor = "333399";
this.addItem = addItem; this.addSubItem = addSubItem; this.showMenu = showMenu; this.mainPaneBorder = 0; this.subMenuPaneBorder = 0;
this.subMenuPaneWidth = submenuwidth;
lastMenu = null;
rightY = 0; leftY = 0; leftX = 0;
HTMLstr = ""; HTMLstr += "<!-- MENU PANE DECLARATION BEGINS -->\n"; HTMLstr += "\n"; if (ie||ns6) HTMLstr += "<div id='MainTable' style='position:relative;top:0'>\n"; // if (n) HTMLstr += "<layer name='MainTable'>\n"; HTMLstr += "<table width='493' bgcolor='"+this.bgColor+"' border='"+this.mainPaneBorder+"'>\n"; HTMLstr += "<tr>"; if (n) HTMLstr += "<td> "; HTMLstr += "<!-- MAIN MENU STARTS -->\n"; HTMLstr += "<!-- MAIN_MENU -->\n"; HTMLstr += "<!-- MAIN MENU ENDS -->\n"; if (n) HTMLstr += "</td>"; HTMLstr += "</tr>\n"; HTMLstr += "</table>\n"; HTMLstr += "\n"; HTMLstr += "<!-- SUB MENU STARTS -->\n"; HTMLstr += "<!-- SUB_MENU -->\n"; HTMLstr += "<!-- SUB MENU ENDS -->\n"; HTMLstr += "\n"; if (ie||ns6) HTMLstr+= "</div>\n"; // if (n) HTMLstr+= "</layer>\n"; HTMLstr += "<!-- MENU PANE DECALARATION ENDS -->\n"; }
function addItem(idItem, text, hint, location, altLocation) { var Lookup = "<!-- ITEM "+idItem+" -->"; if (HTMLstr.indexOf(Lookup) != -1) { alert(idParent + " already exist"); return; } var MENUitem = ""; MENUitem += "\n<!-- ITEM "+idItem+" -->\n"; if (n) { MENUitem += "<ilayer name="+idItem+">"; MENUitem += "<a href='.' class=clsMenuItemNS onmouseover="displaySubMenu('"+idItem+"')" onclick="return false;">"; MENUitem += "| "; MENUitem += text; MENUitem += "</a>"; MENUitem += "</ilayer>"; } if (ie||ns6) { MENUitem += "<td>\n"; MENUitem += "<div id='"+idItem+"' style='position:relative; font: "+this.menuFont+";'>\n"; MENUitem += "<a "; MENUitem += "class=clsMenuItemIE "; // MENUitem += "style='text-decoration: none; font: "+this.menuFont+"; color: "+this.fontColor+"; cursor: hand;' "; if (hint != null) MENUitem += "title='"+hint+"' "; if (location != null) { MENUitem += "href='"+location+"' "; MENUitem += "onmouseover="hideAll()" "; } else { if (altLocation != null) MENUitem += "href='"+altLocation+"' "; else MENUitem += "href='.' "; MENUitem += "onmouseover="displaySubMenu('"+idItem+"')" "; MENUitem += "onclick="return false;" " } MENUitem += ">"; MENUitem += "| \n"; MENUitem += text; MENUitem += "</a>\n"; MENUitem += "</div>\n"; MENUitem += "</td>\n"; } MENUitem += "<!-- END OF ITEM "+idItem+" -->\n\n"; MENUitem += "<!-- MAIN_MENU -->\n";
HTMLstr = HTMLstr.replace("<!-- MAIN_MENU -->\n", MENUitem); }
function addSubItem(idParent, text, hint, location) { var MENUitem = ""; Lookup = "<!-- ITEM "+idParent+" -->"; if (HTMLstr.indexOf(Lookup) == -1) { alert(idParent + " not found"); return; } Lookup = "<!-- NEXT ITEM OF SUB MENU "+ idParent +" -->"; if (HTMLstr.indexOf(Lookup) == -1) { if (n) { MENUitem += "\n"; MENUitem += "<layer id='"+idParent+"submenu' visibility=hide bgcolor='"+this.bgColor+"'>\n"; MENUitem += "<table border='"+this.subMenuPaneBorder+"' bgcolor='"+this.bgColor+"' width="+this.subMenuPaneWidth+">\n"; MENUitem += "<!-- NEXT ITEM OF SUB MENU "+ idParent +" -->\n"; MENUitem += "</table>\n"; MENUitem += "</layer>\n"; MENUitem += "\n"; } if (ie||ns6) { MENUitem += "\n"; MENUitem += "<div id='"+idParent+"submenu' onmouseout=operahide() style='position:absolute; visibility: hidden; z-index:100; width: "+this.subMenuPaneWidth+"; font: "+this.menuFont+"; top: -300;'>\n"; MENUitem += "<table border='"+this.subMenuPaneBorder+"' bgcolor='"+this.bgColor+"' width="+this.subMenuPaneWidth+">\n"; MENUitem += "<!-- NEXT ITEM OF SUB MENU "+ idParent +" -->\n"; MENUitem += "</table>\n"; MENUitem += "</div>\n"; MENUitem += "\n"; } MENUitem += "<!-- SUB_MENU -->\n"; HTMLstr = HTMLstr.replace("<!-- SUB_MENU -->\n", MENUitem); }
Lookup = "<!-- NEXT ITEM OF SUB MENU "+ idParent +" -->\n"; if (n) MENUitem = "<tr><td><a class=clsMenuItemNS title='"+hint+"' href='"+location+"'>"+text+"</a><br></td></tr>\n"; if (ie||ns6) MENUitem = "<tr><td><a class=clsMenuItemIE title='"+hint+"' href='"+location+"'>"+text+"</a><br></td></tr>\n"; MENUitem += Lookup; HTMLstr = HTMLstr.replace(Lookup, MENUitem);
}
function showMenu() { document.writeln(HTMLstr); }
//////////////////////////////////////////////////////////////////////////// // Private declaration function displaySubMenu(idMainMenu) { var menu; var submenu; if (n) { submenu = document.layers[idMainMenu+"submenu"]; if (lastMenu != null && lastMenu != submenu) hideAll(); submenu.left = document.layers[idMainMenu].pageX; submenu.top = document.layers[idMainMenu].pageY + 25; submenu.visibility = fShow;
leftX = document.layers[idMainMenu+"submenu"].left; rightX = leftX + document.layers[idMainMenu+"submenu"].clip.width; leftY = document.layers[idMainMenu+"submenu"].top+ document.layers[idMainMenu+"submenu"].clip.height; rightY = leftY; } else if (ie||ns6) { //alert(document.getElementById(idMainMenu+"submenu").id) menu = ie? eval(idMainMenu) : document.getElementById(idMainMenu); submenu = ie? eval(idMainMenu+"submenu.style") : document.getElementById(idMainMenu+"submenu").style; submenu.left = calculateSumOffset(menu, 'offsetLeft'); // submenu.top = calculateSumOffset(menu, 'offsetTop') + 30; submenu.top = menu.style.top+23; submenu.visibility = fShow; if (lastMenu != null && lastMenu != submenu) hideAll();
leftX = ie? document.all[idMainMenu+"submenu"].style.posLeft : parseInt(document.getElementById(idMainMenu+"submenu").style.left); rightX = ie? leftX + document.all[idMainMenu+"submenu"].offsetWidth : leftX+parseInt(document.getElementById(idMainMenu+"submenu").offsetWidth);
leftY = ie? document.all[idMainMenu+"submenu"].style.posTop+ document.all[idMainMenu+"submenu"].offsetHeight : parseInt(document.getElementById(idMainMenu+"submenu").style.top)+parseInt(document.getElementById(idMainMenu+"submenu").offsetHeight); rightY = leftY; } lastMenu = submenu; }
function hideAll() { if (lastMenu != null) {lastMenu.visibility = fHide;lastMenu.left = 0;} }
function calculateSumOffset(idItem, offsetName) { var totalOffset = 0; var item = eval('idItem'); do { totalOffset += eval('item.'+offsetName); item = eval('item.offsetParent'); } while (item != null); return totalOffset; }
function updateIt(e) { if (ie&&!opr6) { var x = window.event.clientX; var y = window.event.clientY;
if (x > rightX || x < leftX) hideAll(); else if (y > rightY) hideAll(); } if (n||ns6) { var x = e.pageX; var y = e.pageY;
if (x > rightX || x < leftX) hideAll(); else if (y > rightY) hideAll(); } }
function operahide(){ if (opr6){ if (!MainTable.contains(event.toElement)) hideAll() } }
if (ie||ns6) { document.body.onclick=hideAll; document.body.onscroll=hideAll; document.body.onmousemove=updateIt; } if (document.layers) { window.captureEvents(Event.MOUSEMOVE); window.captureEvents(Event.CLICK); window.onmousemove=updateIt; window.onclick=hideAll; }
</script> <script language="JavaScript">
function showToolbar() { // AddItem(id, text, hint, location, alternativeLocation); // AddSubItem(idParent, text, hint, location);
menu = new Menu(); menu.addItem("homeid", "Home", "Home", null, null); menu.addItem("erfolgid", "Erfolgsziele", "Erfolgsziele", null, null); menu.addItem("potenzid", "Potenziale", "Potenziale", null, null); menu.addItem("realisid", "Realisierung", "Realisierung", null, null); menu.addItem("innovid", "Innovationen", "Innovationen", null, null);
menu.addSubItem("innovid", "Adaptronik im Massenmarkt Verkehrstechnik", "Adaptronik im Massenmarkt Verkehrstechnik", "verkehr.htm"); menu.addSubItem("innovid", "Adaptronik stabilisiert Cabrios", "Adaptronik stabilisiert Cabrios", "cabrio.htm"); menu.addSubItem("innovid", "Technologiepartner Maschinenbau", "Technologiepartner Maschinenbau", "maschine.htm"); menu.addSubItem("innovid", "Stop the noise", "Stop the noise", "noise.htm"); menu.addSubItem("innovid", "Adaptronik für Medzintechnik", "Adaptronik für Medizintechnik"); menu.addSubItem("innovid", "Adaptronik mit Zukunftsperspektive", "Adaptronik mit Zukunftsperspektive"); menu.addSubItem("innovid", "Raumfahrt-Erkenntnisse", "Raumfahrt-Erkenntnisse");
menu.showMenu(); } </script> <script language="JavaScript"> showToolbar(); </script> <script language="JavaScript"> function UpdateIt(){ if (ie&&keepstatic&&!opr6) document.all["MainTable"].style.top = document.body.scrollTop; setTimeout("UpdateIt()", 200); } UpdateIt(); </script>
hi,
einmal durchlesen kostet 40.- Euro (heute Sonderpreis)
Tipps kosten extra!
Gruß, Andreas
Tut mir ja leid, ich hätte es auch lieber ein bisschen kürzer - hatte aber leider keine bessere Idee und in meiner Verzweiflung auch keine andere Lösung.
Hast Du vielleicht einen durchführbaren Tipp?
Danke Maren
Tut mir ja leid
ok. angenommen - Ich hatte gestern auch schlechte Laune (heute übrigens auch ;)
Hast Du vielleicht einen durchführbaren Tipp?
also, sowas ist immer mit Arbeit verbunden. Ich würde auch manchmal gern hier einfach mein Programm reinstellen (und die sind u.U. noch deutlich länger) und mir einen Tag später die Lösung abholen - da hat aber keiner Bock drauf!
Erst suche ich durch Testausgaben (z.B.: alert(variable_von_Interesse)).
ZEILE FÜR ZEILE (das kann auch schon mal 1-2 Tage dauern).
Wenn ich einen Bereich eingegrenzt habe, und nicht bescheid weiß, mache ich daraus eine eigene Seite, die eben funktioniert oder auch nicht oder teilweise und stelle sie nach Möglichkeit direkt zum testen ins Netz. So kann jeder erst mal kucken und sich ohne großes Nachdenken ein Bild machen. Quelltext gibt's natürlich dazu (aber wirklich wenig und möglichst gut kommentiert: "hier kommt das, !hier ist mein Problem!, hier kommt das").
Das macht - wie gesagt - wirklich Arbeit. Lohnt sich aber meistens auch.
Wenn allerdings ein Script so groß und schwierig ist, daß man da überhaupt nicht durchsteigt, kann man diese Arbeit nicht leisten, dann muß man eben verzichten - einfach kopieren ist meistens schwierig, irgendwelche Anpassungen sind halt meist nötig.
Gruß, Andreas
Hi,
hier ein kleiner Tip:
laß Dir mal anzeigen, wie sich Dein Menu aufbaut! Ergänze dazu die alert(HTMLstr); Zeile in der Funktion. Dabnach siehst Du, woran es liegt.
Du rufst mit mouseOver ein Submenu auf, das es gar nicht gibt: z.B. displaySubMenu('homeid')
homeidsubmenu hast Du aber nicht definiert, deshalb der Fehler.
function showMenu()
{
alert(HTMLstr);
document.writeln(HTMLstr);
}
Den Rest mußt Du schon selbst auseinanderklamüsern
Es geht aber auch einfacher:
http://www.dynamicdrive.com/dynamicindex1/topmen4/index.htm
Viel Spaß
P