Globales Menü?
Hanz
- javascript
0 Orlando0 Hanz0 Hanz0 Ingo Turski1 H2O
Hallo,
weiß jemand, wie ich bei einer Javascript-Navigation erreichen kann, dass die Position des Menüs (also geöffnete und geschlossene Menübäume) gespeichert und an die nächste Seite weitergegeben wird, damit sich das Menü nicht jedes Mal in seine Anfangsposition zurück begibt?
MfG und Danke,
Hanz
Hallo Hanz,
weiß jemand, wie ich bei einer Javascript-Navigation erreichen kann, dass die Position des Menüs (also geöffnete und geschlossene Menübäume) gespeichert und an die nächste Seite weitergegeben wird, damit sich das Menü nicht jedes Mal in seine Anfangsposition zurück begibt?
Am einfachsten dürfte dies mit einem http://de.selfhtml.org/javascript/objekte/document.htm#cookie@Cookie zu realisieren sein. Speichere darin die geöffneten Zweige.
Siehe auch http://www.roast-horse.com/tutorials/_tutorials/css_js_collapse_menu/
BTW, gibt es eine Alternative (Sitemap), die ohne JavaScript funktioniert?
Grüße
Roland
Cookies, hm...
wollte ich erst nicht machen, weil manche Leute derart Paranoia schieben, dass sie sogar die Cookies deaktivieren, weil sie denken, dass ansonsten ihre Festplatte explodiert.
Gäbe es denn noch ne andere Möglichkeit?
Und gleich nochmal:
Hier ist das Menü:
--------------------------------------------------
var height = 16; // Hoehe der Menuekoepfe
var iheight = 16; // Hoehe der Menueelemente
var bgc = "#CCCCCC" // background color of the item
var tc = "black" // text color of the item
var over_bgc = "CCCCCC";
var over_tc = "#333333";
var speed = 0;
var timerID = "";
var N = (document.all) ? 0 : 1;
var width = 154;
var self_menu = new Array();
function write_menu()
{
smc = 0; // count the position of the self_menu
document.write("<div style='position:absolute'>");
mn = 0;
mni = 1;
start = -1;
for(i=0;i<Link.length;i++)
{
la = Link[i].split("|");
if (la[0] == "0")
{
if(start == 0)
{
document.write("</div>");
h = csmc * iheight;
tmn = mn; //-h
self_menu[smc] = new Array(tmn,h,0,-2);
smc++;
mn--;
}
csmc = 0;
document.write("<div class='menu' style='top:"+mn+";height:"+height+"' id='down"+smc+"' onclick='pull_down("+smc+","+mni+")'> "+ la[1] + "</div>");
self_menu[smc] = new Array(mn,height,0,mni);
smc++;
mni++;
mn+=height;
start = 1;
}
else
{
if(start == 1)
{
if(N)mn+=2;
document.write("<div class='item_panel' id='down"+smc+"' style='top:"+mn+"'>");
start = 0;
}
document.write("<a href='"+la[2]+"'");
if (la[3] != "") document.write(" target='" + la[3] + "' ");
document.write("><div class='item' id='d"+i+"' style='height:"+iheight);
if (N) document.write(";width:150");
document.write("' onmouseover='color(this.id)' onmouseout='uncolor(this.id)'> "+ la[1] + "</div></a>");
csmc++;
}
}
if (start == 0)
{
document.write("</div>");
h = csmc * iheight;
tmn = mn + 5; //-h
self_menu[smc] = new Array(tmn,h,0);
name = "down" + (self_menu.length-1);
obj = document.getElementById(name);
obj.style.borderBottomColor = "#CCCCCC";
obj.style.borderBottomWidth = 1;
obj.style.borderBottomStyle = "solid";
}
document.write("</div>");}
function color(obj)
{
document.getElementById(obj).style.backgroundColor = over_bgc;
document.getElementById(obj).style.color = over_tc
}
function uncolor(obj)
{
document.getElementById(obj).style.backgroundColor = bgc;
document.getElementById(obj).style.color = tc
}
function pull_down(nr,c)
{
if (timerID == "")
{
to = self_menu[nr+1][1]
begin = nr + 2;
if (timerID != "") clearTimeout(timerID);
if (self_menu[nr+1][2] == 0)
{
self_menu[nr+1][2] = 1;
if(nr == self_menu.length-2) {to++;}
epull_down(begin,to,0);
}
else
{
to = 0;
self_menu[nr+1][2] = 0;
name = "down"+(nr+2);
open_item = 0;
for(i=0;i<nr;i++)
{
if(self_menu[i][2] == 1)
{open_item += self_menu[i][1];
}
}
if (N == false) {open_item-= (c*1)};
if (nr== self_menu.length-2) {val = self_menu[self_menu.length-1][1];to=-1;}
else val = parseInt(document.getElementById(name).style.top) -(open_item)-(c*height);
epull_up(begin,to,val);
}
}
}
function epull_down(nr,to,nowv)
{
name = "down" + (nr-1);
obj = document.getElementById(name).style.clip = "rect(0,"+width+","+(nowv+1)+",0)";
for (i=nr;i<self_menu.length;i++)
{
name = "down" + i;
obj = document.getElementById(name);
obj.style.top = parseInt(obj.style.top)+1;
}
nowv++;
if(nowv < to) timerID = setTimeout("epull_down("+nr+","+to+","+nowv+")",speed);
else timerID = "";
}
function epull_up(nr,to,nowv)
{
name = "down" + (nr-1);
obj = document.getElementById(name).style.clip = "rect(0,"+width+","+nowv+",0)";
for (i=nr;i<self_menu.length;i++)
{
name = "down" + i;
obj = document.getElementById(name);
obj.style.top = parseInt(obj.style.top)-1;
}
nowv--;
if(nowv > to) timerID = setTimeout("epull_up("+nr+","+to+","+nowv+")",speed);
else timerID = "";
}
function startup(nr)
{
write_menu();
if (nr != 0)
{
for(i=0;i<self_menu.length;i++)
{
if(self_menu[i][3] == nr) pull_down(i,nr)
i==self_menu.length;
}
}
}
--------------------------------------------------------------
So, schön lang. Ich hab grad üüberhaupt keine Ahnung, was ich jetzt dem Cookie als Wert zuweisen soll...
Hallo Hanz,
So, schön lang. Ich hab grad üüberhaupt keine Ahnung, was ich jetzt dem Cookie als Wert zuweisen soll...
Deshalb würde ich mich ja auch eher Daniel Thomas Baummenü orientieren, da ist das mit dem Aufklappstatus über window.name
geregelt:
http://aktuell.de.selfhtml.org/tippstricks/dhtml/treemenu/index.htm
Gruß Gernot
Hi,
Gäbe es denn noch ne andere Möglichkeit?
zumindest den gerade aktiven Menübaum könntest Du leicht anhand der location ermitteln und öffnen.
freundliche Grüße
Ingo
Hallo Hanz.
Gäbe es denn noch ne andere Möglichkeit?
Du könntest:
1. Sobald ein Menü geöffnet wurde, durchläufst du alle Links auf der Seite
und hänst ein ?offen=... an den Link an, was jedoch
nach Anzahl der Links zeitlastig ist.
2. Du hast die Seite in einem Frame und sobald ein Menü geöffnet
wird speicherst du das einfach in einer Variable in einem anderen Frame
3. Du benutzt window.name und speicherst so die Daten, selbst wenn der
User auf eine andere Seite geht und dann auf deine zurück kommt,
weißt du noch immer welche Menüs aufgeklappt waren.
Infos zu:
2. http://aktuell.de.selfhtml.org/artikel/javascript/wertuebergabe/index.htm
3. http://aktuell.de.selfhtml.org/artikel/javascript/wertuebergabe-2/index.htm
Man liest sich, H2O