Avatar billede b_ Nybegynder
05. december 2005 - 22:27 Der er 8 kommentarer og
1 løsning

Hjælp til tolkning af kode eller et alternativ

Jeg er ved at lave en vertikal dropdownmenu og har ledt overalt på nettet! Nu har jeg fundet een som virker efter hensigten men jeg forstår ikke hele javascriptet! Først oprettet jeg de arrays jeg skal bruge som undermenuer derefter kommer nedenstående kode. Er der nogen som kan forklare mig hvad den gør/siger? Eller nogen som har en mere simplere kode til en vertikal dropdown menu.

var ie4=document.all
var ns6=document.getElementById&&!document.all

if (ie4||ns6)
document.write('<div id="dropmenudiv" style="visibility:hidden;width: 160px"

onMouseover="clearhidemenu()" onMouseout="dynamichide(event)"></div>')

function getposOffset(what, offsettype){
var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
var parentEl=what.offsetParent;
while (parentEl!=null){
totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
parentEl=parentEl.offsetParent;
}
return totaloffset;
}


function showhide(obj, e, visible, hidden, menuwidth){
if (ie4||ns6)
dropmenuobj.style.left=dropmenuobj.style.top=-500
dropmenuobj.widthobj=dropmenuobj.style
dropmenuobj.widthobj.width=menuwidth
if (e.type=="click" && obj.visibility==hidden || e.type=="mouseover")
obj.visibility=visible
else if (e.type=="click")
obj.visibility=hidden
}

function iecompattest(){
return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement :

document.body
}

function clearbrowseredge(obj, whichedge){
var edgeoffset=0
if (whichedge=="rightedge"){
var windowedge=ie4 && !window.opera? iecompattest().scrollLeft+iecompattest().clientWidth-15 :

window.pageXOffset+window.innerWidth-15
dropmenuobj.contentmeasure=dropmenuobj.offsetWidth
if (windowedge-dropmenuobj.x-obj.offsetWidth < dropmenuobj.contentmeasure)
edgeoffset=dropmenuobj.contentmeasure+obj.offsetWidth
}
else{
var topedge=ie4 && !window.opera? iecompattest().scrollTop : window.pageYOffset
var windowedge=ie4 && !window.opera? iecompattest().scrollTop+iecompattest().clientHeight-15 :

window.pageYOffset+window.innerHeight-18
dropmenuobj.contentmeasure=dropmenuobj.offsetHeight
if (windowedge-dropmenuobj.y < dropmenuobj.contentmeasure){ //move menu up?
edgeoffset=dropmenuobj.contentmeasure-obj.offsetHeight
if ((dropmenuobj.y-topedge)<dropmenuobj.contentmeasure) //up no good either? (position at top of

viewable window then)
edgeoffset=dropmenuobj.y
}
}
return edgeoffset
}

function populatemenu(what){
if (ie4||ns6)
dropmenuobj.innerHTML=what.join("")
}


function dropdownmenu(obj, e, menucontents, menuwidth){
    if (window.event) event.cancelBubble=true
        else if (e.stopPropagation) e.stopPropagation()
    clearhidemenu()
    dropmenuobj=document.getElementById? document.getElementById("dropmenudiv") : dropmenudiv
    populatemenu(menucontents)

if (ie4||ns6){
showhide(dropmenuobj.style, e, "visible", "hidden", menuwidth)
dropmenuobj.x=getposOffset(obj, "left")
dropmenuobj.y=getposOffset(obj, "top")
dropmenuobj.style.left=dropmenuobj.x-clearbrowseredge(obj,

"rightedge")+obj.offsetWidth+horizontaloffset+"px"
dropmenuobj.style.top=dropmenuobj.y-clearbrowseredge(obj, "bottomedge")+"px"
}

return clickreturnvalue()
}

function clickreturnvalue(){
if (ie4||ns6) return false
else return true
}

function contains_ns6(a, b) {
while (b.parentNode)
if ((b = b.parentNode) == a)
return true;
return false;
}

function dynamichide(e){
if (ie4&&!dropmenuobj.contains(e.toElement))
delayhidemenu()
else if (ns6&&e.currentTarget!= e.relatedTarget&& !contains_ns6(e.currentTarget, e.relatedTarget))
delayhidemenu()
}

function hidemenu(e){
if (typeof dropmenuobj!="undefined"){
if (ie4||ns6)
dropmenuobj.style.visibility="hidden"
}
}

function delayhidemenu(){
if (ie4||ns6)
delayhide=setTimeout("hidemenu()",disappeardelay)
}

function clearhidemenu(){
if (typeof delayhide!="undefined")
clearTimeout(delayhide)
}
Avatar billede b_ Nybegynder
05. december 2005 - 23:24 #1
Ja koden er laaaaaang - men een som kan fortælle hvad der foregå eller måske komme med et alternativ
Avatar billede b_ Nybegynder
06. december 2005 - 10:52 #2
Kom nu er der ingen som ved noget om overstående kode
Avatar billede johan.o Nybegynder
06. december 2005 - 16:54 #3
Jeg kan ikke lige overskue at beskrive hele den kode for dig men hvis du viser mig et link til den form for menu du leder efter, er det muligt jeg kan hjælpe dig med noget andet kode :)

Mvh. Johan
Avatar billede b_ Nybegynder
06. december 2005 - 18:05 #4
Ja ved godt koden er laaang og uoverskuelig.

Vil gerne have en dropdown menu a la den her:
http://www.dynamicdrive.com/dynamicindex1/anylinkvertical.htm
Avatar billede johan.o Nybegynder
06. december 2005 - 19:46 #5
Okay, jeg har en jeg selv har lavet, prøv at se den her og fortæl om det er noget der kan bruges.

Der er stort set ingen grænser for hvordan du kan få den til at se ud, de ønskede ændringer indføjes blot i menu.css filen.

http://twobarrel.dk/exp/index2.php

Du skal ikke tage dig af .php der foregår ingen php scripting, der kunne ligeså godt have stået .htm

Mvh. Johan
Avatar billede johan.o Nybegynder
06. december 2005 - 19:49 #6
Det er måske værd at nævne at så vidt jeg er informeret så virker menuen i FF, IE, Opera, Netscape og Safari (Mac), der er kun et 'problem' med den onclick event jeg har lavet på <body> nogle af browserne registrerer kun et tryk på body hvis der rent faktisk er noget indhold der hvor der trykkes.

Mvh. Johan
Avatar billede b_ Nybegynder
06. december 2005 - 21:02 #7
Tja din kode er også lang, og det nuværende virker fint, men ville bare gerne have haft en bedre forståelse for hvad der skete :(
Avatar billede johan.o Nybegynder
06. december 2005 - 23:18 #8
Ingen problemer :) - held og lykke.

Mvh. Johan
Avatar billede b_ Nybegynder
08. december 2005 - 13:00 #9
Lukker og slukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester