Avatar billede canedo Nybegynder
13. maj 2003 - 15:45 Der er 28 kommentarer og
1 løsning

Position af dropdown menu

Som en del af en dropdown funktion skal et lag med links dukke frem, - og CSS-scriptet det ser sådan ud:

#Lag1    {
    background-color: #FFFFFF;
    layer-background-color: #FFFFFF;
    border-width: 1px;
    border-style: solid;
    border-color: #0099CC;
    width: 120px;
    top: 20px;
    left: 240px;
    position: absolute;
    z-index: 90;
    visibility: hidden;
    text-align: left;
    }

Hvordan gør jeg sådan, at laget dukker frem på siden alt efter hvor linket er, og ikke antal pixels x og y i forhold til sidens top?
Avatar billede Slettet bruger
13. maj 2003 - 15:46 #1
Det kommer helt an på resten af din kode (smid et link - IKKE hele koden).
Avatar billede canedo Nybegynder
13. maj 2003 - 15:47 #2
Jeg bruger det jo på min lokale IIS i øjeblikket... skal jeg virkelig uploade det?
Avatar billede Slettet bruger
13. maj 2003 - 15:48 #3
Næ, men hvis du vil have hjælp, så jo! :=)
Avatar billede canedo Nybegynder
13. maj 2003 - 15:48 #4
okay, 2 sekunder :)
Avatar billede Slettet bruger
13. maj 2003 - 15:49 #5
Der findes jo et utal af (dårlige og nogle få gode) dropdrownmenuer. Og der er sjældent en "all-round-mirakelløsning" til JavaScript-problemer.
Avatar billede -master-d- Nybegynder
13. maj 2003 - 15:50 #6
Mit forslag ville være noget lignede dette.

linket du kører hen over.

<a href="showDiv();">vis div</a>

scriptet

<script>
function showDiv(){
document.all['Lag1'].style.visibility = 'visible';
x=event.x
y=event.y
document.all['Lag1'].style.left = (x + 20) + "px";
document.all['Lag1'].style.left = y + "px";
}
</script>

Men er ikke nogen guru til javascript så..
Avatar billede canedo Nybegynder
13. maj 2003 - 15:50 #7
Avatar billede canedo Nybegynder
13. maj 2003 - 15:55 #8
mangler en
hideLayer('Lag2');
et sted, men ellers skulle det fungere.
Jeg mangler bare funktionen, som får menuen til at flytte sig alt efter hvor linket befinder sig. Jeg har planer om at menuen skal genereres alt efter indholdet af en database. Menuen skal indeholde under-menuer, som skal dukke op til højre, derfor skal det afhænge af linkets placering og ikke i forhold til hele siden.
Avatar billede Slettet bruger
13. maj 2003 - 16:00 #9
master-d's forslag er godt, men det tager kun hensyn til musens placering.
Jeg vil forklare dig grundprincipperne, så må du klare resten (det, jeg skriver, virker i øvrigt kun i IE, men kan også skrives om til Netscape):

Lagets position skriver du inde i funktionen VisLag:

x = event.clientX - event.offsetX;
y = event.clientY - event.clientY + event.srcElement.offsetHeight;
document.all[layerName].style.left = x;
document.all[layerName].style.top = y;

Lagene skal som før have position: absolute
Avatar billede Slettet bruger
13. maj 2003 - 16:01 #10
Lagets position = for at finde lagets position
Avatar billede -master-d- Nybegynder
13. maj 2003 - 16:05 #11
Det skal selvfølgelig laves sådan at laget ikkemlig pludselig står uden for siden, men det er nok det phoenixv prøver på at forklare dig.
Avatar billede canedo Nybegynder
13. maj 2003 - 16:15 #12
Hvad synes I ellers om det script jeg anvender i øjeblikket? Jeg har ikke en hat forstand på javascript, men kan se at der er noget script som bestemmer noget om IE eller Netscape. Måske skulle jeg finde en anden tutorial eller et helt nyt script at tage udgangspunkt i?

Jeg vender tilbage i morgen tidlig, og scripter videre på min drop down funktion med friske øjne.
Avatar billede roenving Novice
13. maj 2003 - 17:14 #13
Et godt sted at få ideer -- koden, som bruges her på siden - f.eks. hvis du klikker på mit navn her ved siden af:

function get_obj ($name) {
        return bw.dom ? document.getElementById($name) : bw.ie ? document.all[$name] : bw.ns4 ? document[$name] : null;
    }
    function get_x ($obj) {
        return bw.ns4 ? $obj.pageX : ($obj == document.body) ? $obj.offsetLeft : get_dom_x($obj);
    }
    function get_dom_x ($obj) {
        return $obj == document.body ? $obj.offsetLeft : $obj.offsetLeft + get_dom_x($obj.offsetParent);
    }
    function get_y ($obj) {
        return bw.ns4 ? $obj.pageY : ($obj == document.body) ? $obj.offsetTop : get_dom_y($obj);
    }
    function get_dom_y ($obj) {
        return $obj == document.body ? $obj.offsetTop : $obj.offsetTop + get_dom_y($obj.offsetParent);
    }

    var $current_rid, $current_username, $tid;

    function post_tools ($rid, $username, $pos) {
        window.clearTimeout($tid);
        if (document.all && document.getElementById) {            //IE5
            $item = qtools.style;
        } else if (!document.all && document.getElementById) {    //NS6
            $item = document.getElementById('qtools').style;
        } else {    // !IE5 && !NS6
            document.location.href = '/bruger.phtml?navn='+escape($username);
            return false;
        }
        if ($current_rid == $rid) {
            $item.display = 'none';
            $item.visibility = 'hidden';
            $current_rid = -1;
        } else {
            $item.display = 'inline';
            $item.visibility = 'visible';
            var $obj = get_obj('rid'+$rid);
            if ($rid) {
                $item.left = get_x($obj);
                $item.top = get_y($obj) + 14;
            } else {
                if (document.all && document.getElementById) {
                    $item.left = $pos.x - 250;
                } else {
                    $item.left = $pos.pageX - 250;
                }
                $item.top = get_y($obj) + 16;
            }
            $current_rid = $rid;
            $current_username = $username;
            $tid = window.setTimeout('post_tools('+$rid+',0,0)', 30000);
        }
    }

Den viser en <div>, som ligger hidden, men tager udgangspunkt i den placering, som elementet, du trykker på, har.

hth
jes
Avatar billede olebole Juniormester
13. maj 2003 - 19:52 #14
<ole>

Du kan altid hente placeringen af et ikke-positioneret element med:

function getPos(elm){
    for(var zx=zy=0;elm!=null;zx+=elm.offsetLeft,zy+=elm.offsetTop,elm=elm.offsetParent);
    return {x:zx,y:zy}
}

... som bruges på denne måde:
var pos = getPos(object);
alert("x= "+pos.x+"\ny= "+pos.y);

/mvh
</bole>
Avatar billede olebole Juniormester
13. maj 2003 - 19:53 #15
Et eksempel på brugen af scriptet kunne være:

<html>
<head>
<script type="text/JavaScript">
function getPos(elm) {
    for(var zx=zy=0;elm!=null;zx+=elm.offsetLeft,zy+=elm.offsetTop,elm=elm.offsetParent);
    return {x:zx,y:zy}
}
function linkpos(linkElm) {
    var pos = getPos(linkElm);
    alert("Mit links x-position er: " + pos.x);
    alert("Mit links y-position er: " + pos.y);
}
</script>
</head>
<body>

<br><br><br>
blablablablabla <a href="#" onmouseover="linkpos(this)">TEST</a>

</body>
</html>

/mvh
Avatar billede canedo Nybegynder
14. maj 2003 - 11:59 #16
roenving > Jeg har fået til opgave at lave en menu, som dukker frem i det musen føres hen over kategorierne... selvom jeg personligt også kan li den menu ligesom her på exp.dk.
Avatar billede canedo Nybegynder
14. maj 2003 - 12:04 #17
olebole > Jeg ved som sagt intet om javascript, og har lige nogle spørgsmål til det script du har sendt:
Er det et script som får en menu til at komme frem uden man trykker på musen?
Kan det eventuelt integreres med den javascript fil jeg har?
Er det en god løsning til en menu hvor niveauerne genereres fra en database?
Avatar billede olebole Juniormester
14. maj 2003 - 14:02 #18
Det er blot et script, der giver positionen, hvor submenuen skal placeres. Den kan lægges på onmouseover eller onclick, efter behag.

Ja, den kan helt sikkert integreres med din bestående kode - men jeg har ikke tid.

Ja, hvor data kommer fra, er ligegyldigt.
/mvh
Avatar billede canedo Nybegynder
14. maj 2003 - 14:18 #19
Sådan ser mit script ud på den side, hvor funktionen hentes ind på siden:
<HEAD>
<TITLE>Fjordvejs Maskinfabrik A/S</TITLE>

<link rel='stylesheet' type='text/css' href='style.css'>
<script language="JavaScript" type="text/javascript" src="nav.js"></script>
</HEAD>
<BODY  onLoad="init();" class="main">

Hvordan kan jeg placere positionen af menuens punkter med javascript?
Avatar billede Slettet bruger
14. maj 2003 - 15:16 #20
Hvis du har fået til opgave et lave en dropdown-menu, og du ikke har den fornødne erfaring (det kræver ret meget at lave sådan en ordentligt), så vil jeg anbefale at tale med ham, der har givet dig opgaven. CoolMenus vil formentlig løse problemet udmærket.
Avatar billede canedo Nybegynder
14. maj 2003 - 15:47 #21
phoenixv > jeg får sandsynligvis flere af de her opgaver i fremtiden, og har allerede nu noget script at starte på. Så vil jeg gå videre herfra. Måske bliver CoolMenus løsningen, men indtil videre vil jeg lige prøve selv.
Avatar billede Slettet bruger
14. maj 2003 - 16:59 #22
Det er altid en god idé at tage tingene fra en ende af. Udfordringer er for det meste givtige, men start med det basale og arbejd dig op derfra. Så vidt jeg kan se, kan du allerede en masse JavaScript, men du mangler lidt erfaring i at kode større sammenhængende koder. Prøv derfor at tage det stille og roligt, og hvis du absolut vil lave denne dropdown-menu, så gør det i etaper - én ting ad gangen.
Avatar billede canedo Nybegynder
15. maj 2003 - 08:15 #23
phoenixv > CoolMenus er det et program man kan få i en trial eventuelt?
Avatar billede canedo Nybegynder
15. maj 2003 - 09:26 #24
Avatar billede Slettet bruger
18. maj 2003 - 11:00 #25
Det var nu dette, jeg tænkte på:
http://www.dhtmlcentral.com/projects/coolmenus/?m=10
Avatar billede canedo Nybegynder
20. maj 2003 - 11:02 #26
phoenixv > læg et svar, hvis du vil :)
Avatar billede Slettet bruger
20. maj 2003 - 16:20 #27
Svar
Avatar billede canedo Nybegynder
21. maj 2003 - 09:58 #28
phoenixv > forresten, ved du om der findes et program som kan lave dropdown menuen, eventuelt? Jeg har nemlig ikke overskud til at skulle sætte mig ind i javascript nu og her. Hvis der fantes et program som kan generere drop-down menuen ville det være perfekt, - jeg er også villig til at ofre lidt klejner på det, hvis det er det der skal til.
Avatar billede Slettet bruger
24. maj 2003 - 20:20 #29
Man behøver faktisk ikke kende særligt meget til JavaScript for at rette menuen til. Men det er da en fordel for overblikkets skyld.

Dog er der vist et "menu builder" punkt på ovennævnte side, men den er desværre nede lige p.t.
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