Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[JavaScript] Automatisch inklappen folding menu

Pagina: 1
Acties:

  • chicky
  • Registratie: Augustus 2001
  • Laatst online: 01-06 15:35
Hoi,

Ik heb een scriptje gedownload van http://www.dynamicdrive.com/dynamicindex1/navigate1.htm.

(In het verleden is er als een een topic geweest over dit voorloper van dit script. De url hiervan is dezelfde als hierboven, maar het script is absoluut anders.)

Het script zorgt er voor dat je een zgn. "smart folding tree menu" in vertikale richting kan maken, met zeer simpele html code.

Als je een menu item aanklikt (en dit item is heeft een submenu), vouwt dit item open.
Door meer items aan te klikken, wordt de tree dus steeds langer.

Wat ik graag wil is; dat wanneer ik een nieuwe folder aan klik, de vorige folder sluit.
Tot nu toe is mij het nog niet gelukt om het script zodanig aan te passen dat dit is gelukt.

Een voorbeeld van de html code is:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <title>Untitled Document</title>
        <script type="text/javascript" src="simpletreemenu.js"></script>
        <link rel="stylesheet" type="text/css" href="simpletree.css" />
    </head>
    
    <body>
        <ul id="treemenu1" class="treeview">
            <li>Item 1</li>
            <li>Item 2</li>
            <li>Folder 1
                <ul>
                    <li>Sub Item 1.1</li>
                    <li>Sub Item 1.2</li>
                </ul>
            </li>
            <li>Item 3</li>
            <li>Folder 2
                <ul>
                    <li>Sub Item 2.1</li>
                    <li>Folder 2.1
                        <ul>
                            <li>Sub Item 2.1.1</li>
                            <li>Sub Item 2.1.2</li>
                        </ul>
                    </li>
                    <li>Folder 2.2
                        <ul>
                            <li>Sub Item 2.2.1</li>
                            <li>Sub Item 2.2.2</li>
                        </ul>
                    </li>
                </ul>
            </li>
            <li>Item 4</li>
        </ul>

        <script type="text/javascript">
            //ddtreemenu.createTree(treeid, enablepersist, opt_persist_in_days (default is 1))
            ddtreemenu.createTree("treemenu1", true)
        </script>
    </body>
</html>


In de code wordt verwezen naar een javascript met de naam: simpletreemenu.js

De code van het script is:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
var persisteduls=new Object()
var ddtreemenu=new Object()

ddtreemenu.closefolder="closed.gif" //set image path to "closed" folder image
ddtreemenu.openfolder="open.gif" //set image path to "open" folder image

//////////No need to edit beyond here///////////////////////////
ddtreemenu.createTree=function(treeid, enablepersist, persistdays){
    var ultags=document.getElementById(treeid).getElementsByTagName("ul")
    if (typeof persisteduls[treeid]=="undefined")
        persisteduls[treeid]=(enablepersist==true && ddtreemenu.getCookie(treeid)!="")? ddtreemenu.getCookie(treeid).split(",") : ""
    for (var i=0; i<ultags.length; i++)
        ddtreemenu.buildSubTree(treeid, ultags[i], i)
    if (enablepersist==true){ //if enable persist feature
        var durationdays=(typeof persistdays=="undefined")? 1 : parseInt(persistdays)
        ddtreemenu.dotask(window, function(){ddtreemenu.rememberstate(treeid, durationdays)}, "unload") //save opened UL indexes on body unload
    }
}

ddtreemenu.buildSubTree=function(treeid, ulelement, index){
    ulelement.parentNode.className="submenu"
    if (typeof persisteduls[treeid]=="object"){ //if cookie exists (persisteduls[treeid] is an array versus "" string)
        if (ddtreemenu.searcharray(persisteduls[treeid], index)){
            ulelement.setAttribute("rel", "open")
            ulelement.style.display="block"
            ulelement.parentNode.style.backgroundImage="url("+ddtreemenu.openfolder+")"
        }
        else
            ulelement.setAttribute("rel", "closed")
    } //end cookie persist code



    else if (ulelement.getAttribute("rel")==null || ulelement.getAttribute("rel")==false) //if no cookie and UL has NO rel attribute explicted added by user
        ulelement.setAttribute("rel", "closed")
    else if (ulelement.getAttribute("rel")=="open") //else if no cookie and this UL has an explicit rel value of "open"
        ddtreemenu.expandSubTree(treeid, ulelement) //expand this UL plus all parent ULs (so the most inner UL is revealed!)
    ulelement.parentNode.onclick=function(e){
        var submenu=this.getElementsByTagName("ul")[0]
        if (submenu.getAttribute("rel")=="closed"){
            submenu.style.display="block"
            submenu.setAttribute("rel", "open")
            ulelement.parentNode.style.backgroundImage="url("+ddtreemenu.openfolder+")"
        }
        else if (submenu.getAttribute("rel")=="open"){
            submenu.style.display="none"
            submenu.setAttribute("rel", "closed")
            ulelement.parentNode.style.backgroundImage="url("+ddtreemenu.closefolder+")"
        }
        ddtreemenu.preventpropagate(e)
    }
    ulelement.onclick=function(e){
        ddtreemenu.preventpropagate(e)
    }
}

ddtreemenu.expandSubTree=function(treeid, ulelement){ //expand a UL element and any of its parent ULs
    var rootnode=document.getElementById(treeid)
    var currentnode=ulelement
    currentnode.style.display="block"
    currentnode.parentNode.style.backgroundImage="url("+ddtreemenu.openfolder+")"
    while (currentnode!=rootnode){
        if (currentnode.tagName=="UL"){ //if parent node is a UL, expand it too
            currentnode.style.display="block"
            currentnode.setAttribute("rel", "open") //indicate it's open
            currentnode.parentNode.style.backgroundImage="url("+ddtreemenu.openfolder+")"
        }
        currentnode=currentnode.parentNode
    }
}

ddtreemenu.flatten=function(treeid, action){ //expand or contract all UL elements
    var ultags=document.getElementById(treeid).getElementsByTagName("ul")
    for (var i=0; i<ultags.length; i++){
        ultags[i].style.display=(action=="expand")? "block" : "none"
        var relvalue=(action=="expand")? "open" : "closed"
        ultags[i].setAttribute("rel", relvalue)
        ultags[i].parentNode.style.backgroundImage=(action=="expand")? "url("+ddtreemenu.openfolder+")" : "url("+ddtreemenu.closefolder+")"
    }
}

ddtreemenu.rememberstate=function(treeid, durationdays){ //store index of opened ULs relative to other ULs in Tree into cookie
    var ultags=document.getElementById(treeid).getElementsByTagName("ul")
    var openuls=new Array()
    for (var i=0; i<ultags.length; i++){
        if (ultags[i].getAttribute("rel")=="open")
            openuls[openuls.length]=i //save the index of the opened UL (relative to the entire list of ULs) as an array element
    }
    if (openuls.length==0) //if there are no opened ULs to save/persist
        openuls[0]="none open" //set array value to string to simply indicate all ULs should persist with state being closed
    ddtreemenu.setCookie(treeid, openuls.join(","), durationdays) //populate cookie with value treeid=1,2,3 etc (where 1,2... are the indexes of the opened ULs)
}

////A few utility functions below//////////////////////
ddtreemenu.getCookie=function(Name){ //get cookie value
    var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair
    if (document.cookie.match(re)) //if cookie found
        return document.cookie.match(re)[0].split("=")[1] //return its value
    return ""
}

ddtreemenu.setCookie=function(name, value, days){ //set cookei value
    var expireDate = new Date()
    //set "expstring" to either future or past date, to set or delete cookie, respectively
    var expstring=expireDate.setDate(expireDate.getDate()+parseInt(days))
    document.cookie = name+"="+value+"; expires="+expireDate.toGMTString()+"; path=/";
}

ddtreemenu.searcharray=function(thearray, value){ //searches an array for the entered value. If found, delete value from array
    var isfound=false
    for (var i=0; i<thearray.length; i++){
        if (thearray[i]==value){
            isfound=true
            thearray.shift() //delete this element from array for efficiency sake
            break
        }
    }
    return isfound
}

ddtreemenu.preventpropagate=function(e){ //prevent action from bubbling upwards
    if (typeof e!="undefined")
        e.stopPropagation()
    else
        event.cancelBubble=true
}

ddtreemenu.dotask=function(target, functionref, tasktype){ //assign a function to execute to an event handler (ie: onunload)
    var tasktype=(window.addEventListener)? tasktype : "on"+tasktype
    if (target.addEventListener)
        target.addEventListener(tasktype, functionref, false)
    else if (target.attachEvent)
        target.attachEvent(tasktype, functionref)
}


In het script is een functie die "ddtreemenu.flatten" heet. Deze functie kan je vanuit je html code aanroepen (staat omschreven op de site van www.dynamicdrive.com) om de gehele tree in te vouwen, door de volgende code te gebruiken:

HTML:
1
<a href="javascript:ddtreemenu.flatten('treemenu1', 'contact')">Contact All</a>


Mij gedachte was als volgt:
Het invouwen van de vorige folder, is niets meer of minder dan het geheel inklappen van de tree, voordat het nieuwe item wordt geopend. Hiervoor kan ik dus de functie "ddtreemenu.flatten" gebruiken.

Aan het einde van de html code wordt de functie "ddtreemenu.createTree" aangeroepen om het script te starten.

Ik dacht dat, als ik de code van de functie "ddtreemenu.flatten" nu eens in het begin van de functie "ddtreemenu.createTree" plaatst, wordt met het aan klikken van een menu item, eerst het gehele menu ingeklapt voordat het nieuwe menu item wordt geopend.

Hiervoor heb ik de code van de functie "ddtreemenu.flatten" wat uitgekleed en meteen een aantal variabele gevuld. Ik kom dan tot de volgende code:

JavaScript:
1
2
3
4
5
var ultags=document.getElementById(treeid).getElementsByTagName("ul")
    for (var i=0; i<ultags.length; i++){
        ultags[i].style.display="none"
        ultags[i].setAttribute("rel", "closed")
        ultags[i].parentNode.style.backgroundImage="url("+ddtreemenu.closefolder+")"


Deze code heb ik dus aan het begin van de functie "ddtreemenu.createTree" geplaats, maar dit gaat dus niet werken.

Ik ben er van overtuigd dat ik de code van "ddtreemenu.flatten", goed heb uitgekleed om de tree in te kunnen laten vouwen.

Deze vraag heb ik bij het forum van www.dynamicdrive.com ook gesteld, maar heb na 10 dagen nog niet 1 reply gehad)

Ik hoop dat er iemand is die mij kan vertellen wat ik niet goed doe.

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Ga over op jQuery en gebruik iets als dit:
JavaScript:
1
2
3
4
$("ul.treeview li").toggle(
  function() { $(this).children("ul").show(); },
  function() { $(this).children("ul").hide(); }
);


En klaar ben je. Die ddtreemenu is te belachelijk voor woorden om alleen een uitklapbaar menuutje te maken. En het stikt van de syntaxfouten.

disclaimer: niet getest, wel vaak gebruikt

[ Voor 3% gewijzigd door _Thanatos_ op 20-09-2008 01:30 ]

日本!🎌


Verwijderd

Yep, JQuery is the way to go. Zijn ook genoeg plugins voor te krijgen die precies doen wat jij wilt.
Zelf heb ik wel eens http://plugins.jquery.com/project/treeview gebruikt voor een project. Maar er zijn ongetwijfeld meer plugins die hetzelfde kunnen.

Die bak code die je gepost hebt is een beetje overkill voor zoiets simpels als een treemenu. Het lijkt me ook niet echt zinnig om daar zelf in te gaan prutsen. Pak dan gelijk een plugin die wel doet wat je wil met 1/10e van de code.

[ Voor 66% gewijzigd door Verwijderd op 20-09-2008 01:50 ]


  • Mei
  • Registratie: Juni 2005
  • Laatst online: 17-10-2024

Mei

JavaScript:
1
2
3
4
5
6
7
$(document).ready(function () {
  var parents = $('.treeview li');
  parents.find('ul').hide();
  parents.click(function () {
    $(this).children('ul').slideToggle('fast');
  });
});


Even voortbordurend op het eerdere idee om jQuery te gebruiken. Dit is een variatie op een scriptje dat ik vorige week heb geschreven om soortgelijke lijsten uit te kunnen laten klappen. Het enige wat je hoeft te doen is zorgen dat je jQuery bij je pagina invoegt en bovenstaande code in een bestandje zet en die ook bijvoegt. Elke <ul class="treeview [...]"> zal dan uitklapbaar worden.

  • Juup
  • Registratie: Februari 2000
  • Niet online
Tsja zonder jQuery is het ook maar een paar regels js.
1 onclick handler op de hoogste <ul/> die een toggle van de evt.(target|srcElement).firstChild doet.
De rest is CSS...

[ Voor 13% gewijzigd door Juup op 20-09-2008 02:22 ]

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:18

crisp

Devver

Pixelated

Die bak code die je gepost hebt is een beetje overkill voor zoiets simpels als een treemenu.
Iets zegt me dat een complete JS library nog wel een bak meer code is ;)

En waarom specifiek jQuery? Geef dan op z'n minst een aantal opties met voorbeelden zodat de topicstarter daar zelf van uit kan maken wat het beste bij hem past...

Intentionally left blank


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 11-11 10:24

Bosmonster

*zucht*

crisp schreef op zaterdag 20 september 2008 @ 08:52:
[...]

Iets zegt me dat een complete JS library nog wel een bak meer code is ;)

En waarom specifiek jQuery? Geef dan op z'n minst een aantal opties met voorbeelden zodat de topicstarter daar zelf van uit kan maken wat het beste bij hem past...
De meeste sites gebruiken wel meer javascript. Als ik kijk wat ik kan bereiken in een paar regels xbrowser code in zo weinig tijd geschreven, dan maakt dat beetje overhead van een library (zeker zo klein als jQuery, de kleinste die er te krijgen is met iets van 18K gzip'ed) niet zoveel uit.

Waarom specifiek jQuery? Uiteraard heb ik het antwoord niet gegeven, maar ik ga er even vanuit dat Thanatos daarmee bekend is.

Zoals je weet is het ook mijn favoriet en ik heb ze wel allemaal uitgebreid bekeken en geprobeerd. De voordelen van jQuery?

- Kleinste library (55K minified, scriptaculous is bijvoorbeeld bijna 200K minified....)
- Extreem eenvoudige syntax, in een paar uur te leren. Met Mootools zit ik nog steeds regelmatig aan mn hoofd te krabben over de onduidelijke API.
- Minste code/snelste te schrijven

De andere libraries zijn ook prima, maar kunnen vanuit zakelijk oogpunt imho niet tippen aan een jQuery. Tijd = geld.

De snippet van Thanatos geeft wel aan hoe extreem simpel, kort en leesbaar jQuery code is.

[ Voor 9% gewijzigd door Bosmonster op 20-09-2008 09:45 ]


  • Mei
  • Registratie: Juni 2005
  • Laatst online: 17-10-2024

Mei

crisp schreef op zaterdag 20 september 2008 @ 08:52:
[...]

Iets zegt me dat een complete JS library nog wel een bak meer code is ;)

En waarom specifiek jQuery? Geef dan op z'n minst een aantal opties met voorbeelden zodat de topicstarter daar zelf van uit kan maken wat het beste bij hem past...
Waarom een library? Omdat als ik de TS goed inschat hij niet zozeer JS wil leren als de boel snel werkend wil hebben (JS van scriptsites plukken is niet de beste manier om het te leren)

Waarom jQuery? Goede ervaringen mee. Heb het halfhalf vergeleken met Prototype en ik vond het toch een stukje gestructureerder en netter eruit zien.

  • DiSiLLUSiON
  • Registratie: September 2000
  • Laatst online: 02-10 09:07
* DiSiLLUSiON is with Jaaap.

Het is inderdaad ook zeer makkelijk op te lossen via enkele regels JS en wat CSS. Maak wat classes aan, pak een click/keypress event en hang hier een toggle functie aan. Dat is ook voor een beginner veel makkelijker dan het klinkt. Een complete library (zelfs een kleine als jQuery) lijkt me hier ontzettende overkill.

Het mag dan wel 18k minified zijn, het dient tóch elke keer gedownload te worden omdat de cache te overrated is (men bezoekt vaak teveel websites ten opzichte van de cache grootte of laat alles verwijderen bij het sluiten van de browser) en daarna ook nog eens geparsed en in het geheugen opgeslagen te worden. Bij een simpele site mag je er vanuit gaan dat je niet het enige tabje bent dat men tegelijk open heeft staan, dat is echt belangrijk om je te realiseren, zo weinig mogelijk JS is toch echt wel gewenst.

Op het moment dat de TS een aantal andere mogelijkheden van een dergelijke library wilt gaan benutten, dan wordt het een ander verhaal; dan kan het best rendabel zijn. Die libraries zijn er niet voor niets, het scheelt tijd en moeite.

In dat geval is het dan ook aan te raden voor de TS om te kijken naar de mogelijkheden en widgets van een aantal verschillende libraries (jQuery, mootools, dojo, qooxdoo, bindows, noem maar op) om te kijken welke het beste passen bij de wensen. De hoeveelheid sites die namelijk beginnen met één library omdat die zo mooi clean en klein is, en er vervolgens nog maar een of twee bij gooien vanwege mogelijkheden die de eerste niet heeft is niet op een hand te tellen, en doet mij (en vast ook anderen) gruwelen. ;)

[ Voor 12% gewijzigd door DiSiLLUSiON op 20-09-2008 11:30 ]


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 11-11 10:24

Bosmonster

*zucht*

DiSiLLUSiON schreef op zaterdag 20 september 2008 @ 11:20:
* DiSiLLUSiON is with Jaaap.
De hoeveelheid sites die namelijk beginnen met één library omdat die zo mooi clean en klein is, en er vervolgens nog maar een of twee bij gooien vanwege mogelijkheden die de eerste niet heeft is niet op een hand te tellen, en doet mij (en vast ook anderen) gruwelen. ;)
Als je een library kiest vanwege de 'cleanheid', dan neem ik aan dat je er zelf in ontwikkelt en geen andere libraries ernaast plakt. Dat doe je alleen als je scriptjes van internet plukt en toevallig niet de juiste kan vinden voor je library. En als je dat doet boeit de cleanheid natuurlijk ook niet, want dat betekent dat je het zelf niet kan ontwikkelen.

  • DiSiLLUSiON
  • Registratie: September 2000
  • Laatst online: 02-10 09:07
Bosmonster schreef op zaterdag 20 september 2008 @ 12:59:
[...]
Als je een library kiest vanwege de 'cleanheid', dan neem ik aan dat je er zelf in ontwikkelt en geen andere libraries ernaast plakt. Dat doe je alleen als je scriptjes van internet plukt en toevallig niet de juiste kan vinden voor je library. En als je dat doet boeit de cleanheid natuurlijk ook niet, want dat betekent dat je het zelf niet kan ontwikkelen.
Vergeet de mensen niet die een bepaalde library alleen gebruiken op 'aanraden'. "Die is klein, neem die!". "Deze is makkelijk in gebruik!". Zulke adviezen zijn goedbedoeld, maar betekenen in feite vaak weinig voor de persoon die er geen verstand van heeft. Of, ze gebruiken een bepaalde library omdat ze er toevallig een leuk voorbeeldje voor kunnen knippen/plakken. Als zo'n persoon dan later een ander leuk voorbeeldje in een andere library tegenkomt, kan zoiemand al snel geneigd zijn om die er 'maar even' bij te plakken, zoals je zelf al aangeeft.

Vandaar dat het juist voor diegenen die niet zelf ontwikkelen handig is om eerst te bekijken welke functionaliteit / widgets precies nodig zijn, en welke library dit allemaal biedt, en of het uberhaupt zin heeft om een library te gebruiken voor een enkel klein dingetje. "Gaat dit nog uitgebreid worden of niet?" Beetje vooruit plannen eigenlijk.

[ Voor 6% gewijzigd door DiSiLLUSiON op 20-09-2008 13:51 . Reden: aanhalingstekens vergeten ]


Verwijderd

Misschien heb je er iets aan,
ik heb vorige maand ook naar zoiets zitten kijken, gewoon een soort dropdown menuutje, maar het is natuurlijk ook als tree te gebruiken.

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<ul id="navigation">
   <li><a href="#">home</a>
    <ul>
     <li><a href="#">ziemaar</a></li>
     <li><a href="#">to-do</a></li>
     <li><a href="#">buitenland</a></li>
     <li><a href="#">kroket</a></li>
    </ul>
   </li>
   <li class="active"><a href="#">frikadel</a>
    <ul>
     <li><a href="#">apennoot</a></li>
     <li><a href="#">olifant</a></li>
     <li class="active"><a href="#">gekke</a></li>
    </ul>
   </li>
   <li><a href="#">mies</a>
    <ul>
     <li><a href="#">aap</a></li>
     <li><a href="#">noot</a></li>
    </ul>
   </li>
   <li><a href="#">De</a>
    <ul>
     <li><a href="#">En</a></li>
     <li><a href="#">Ditte</a></li>
     <li><a href="#">Vier</a></li>
    </ul>
   </li>
   <li><a href="#">Navigatie</a>
    <ul>
     <li><a href="#">Maar</a></li>
     <li><a href="#">We</a></li>
     <li><a href="#">Hebben</a></li>
     <li><a href="#">Ook</a></li>
     <li><a href="#">Vijf</a></li>
    </ul>
   </li>
  </ul>


JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<script type="text/javascript">

var navigationid = ["navigation"]

function navigation()
{
    for (var i = 0; i < navigationid.length; i++)
    {
        var ultags = document.getElementById(navigationid[i]).getElementsByTagName("ul")
        for (var t = 0; t < ultags.length; t++)
        {
            ultags[t].parentNode.onmouseover=function()
            {
                //alert(this.className)
                if(this.className != "active")
                {
                    this.getElementsByTagName("ul")[0].style.display = "block"
                    this.getElementsByTagName("ul")[0].style.zIndex = "2"
                    this.style.backgroundColor = "#c4ae89"
                }
                //this.getElementsByTagName("ul")[0].style.display="block"
            }
            ultags[t].parentNode.onmouseout=function()
            {
                if(this.className != "active")
                {
                    this.getElementsByTagName("ul")[0].style.display="none"
                    this.getElementsByTagName("ul")[0].style.zIndex = "0"
                    this.style.backgroundColor = "#a99167"
                }
            }
        }
    }
}

if (window.addEventListener)
    window.addEventListener("load", navigation, false)
else if (window.attachEvent)
    window.attachEvent("onload", navigation)

</script>


Er zitten misschien dingen in als backgroundColor enzo, maar dat komt omdat ik het voor mezelf heb geschreven, dus ik zal je ook maar even de CSS geven ;-)

Cascading Stylesheet:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 ul#navigation { position: absolute; top: 0px; left: 0px; width: 942px; height: 24px; background-color: #a99167; border-top: 1px solid #fff; list-style: none; }
 ul#navigation li { height: 24px; border-right: 1px solid #fff; float: left; }
 ul#navigation li a { margin-top: -1px; padding: 0px 12px; font-size: 70%; letter-spacing: 1px; line-height: 24px; color: #fff; text-decoration: none; border-top: 1px solid #fff; display: block; }
 ul#navigation li a:hover { border-top: 1px solid #fff; background-color: #c4ae89; }

 ul#navigation li ul { position: absolute; top: 24px; left: 0px; width: 942px; height: 24px; display: none; z-index: 1; background-color: #c4ae89; border-top: 1px solid #fff; list-style: none; }
 ul#navigation li ul li { float: left; }
 ul#navigation li ul li a { margin-top: 0px; border-top: 0px; }
 ul#navigation li ul li a:hover { border-top: 0px; background-color: #cfbd9c; }

 ul#navigation li.active a { margin-top: -1px; padding: 0px 12px; font-size: 70%; letter-spacing: 1px; line-height: 24px; color: #fff; text-decoration: none; border-top: 1px solid #840000; background-color: #840000; display: block; }
 ul#navigation li.active a:hover { border-top: 1px solid #840000; }
 ul#navigation li.active ul { display: block; }
 ul#navigation li.active ul li a { margin-top: 0px; border-top: 0px; background-color: #c4ae89; }
 ul#navigation li.active ul li a:hover { border-top: 0px; background-color: #cfbd9c; }
 ul#navigation li.active ul li.active a { margin-top: 0px; border-top: 0px; background-color: #e1d0b2; }


Je ziet dat het maar heel weinig code is, probeer het eens uit in 1 bestand zou ik zeggen, misschien kun je het ombouwen tot iets wat je zelf nodig hebt.

  • chicky
  • Registratie: Augustus 2001
  • Laatst online: 01-06 15:35
Hoi,

Alvast allemaal bedankt voor de replies en (soms) goede alternatieven en suggesties _/-\o_

Maar wat ik bij de alternatieven mis is de persistentie van het menu. De persistentie van het menu heeft als voordeel dat als je van de ene naar de andere webpagina surft of je browser afsluit, het menu er uit blijft zien (met menu items opengeklapt) zoals je het voor het laatst hebt achter gelaten.
Voor de toepassing waarin ik het menu wil gebruiken heeft dit voordelen. Dit is een reden dat ik graag dit menu zou willen blijven gebruiken.

Ondanks alle positieve replies heeft nog niemand inhoudelijk op mijn vraag gereageerd; Hoe laat ik het ene menu sluiten als ik het andere openen?

Ik hoop van harte dat iemand mij daar nog even mee zou willen helpen.

  • Juup
  • Registratie: Februari 2000
  • Niet online
Persistence en andere-items-inklappen is in alle hierboven angegeven mogelijkheden goed te doen.

Als je er voor kiest om zelf iets te maken of dan helpen we je graag met praktische problemen waar je tegenaan loopt.

Als je er voor kiest om het dynamicdrive script te gebruiken dan wens ik je veel succes en suggereer dat je op hun forum deze vraag nog eens stelt.

edit: dat had je al gedaan en je kreeg geen replies.

[ Voor 30% gewijzigd door Juup op 23-09-2008 01:34 ]

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • Juup
  • Registratie: Februari 2000
  • Niet online
Verwijderd schreef op zaterdag 20 september 2008 @ 14:28:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        for (var t = 0; t < ultags.length; t++)
        {
            ultags[t].parentNode.onmouseover=function()
            {
                //alert(this.className)
                if(this.className != "active")
                {
                    this.getElementsByTagName("ul")[0].style.display = "block"
                    this.getElementsByTagName("ul")[0].style.zIndex = "2"
                    this.style.backgroundColor = "#c4ae89"
                }
                //this.getElementsByTagName("ul")[0].style.display="block"
            }
        }
FYI: dit zou ook zonder JS met CSS opgelost kunnen worden (voor IE6 zou je dan helaas wel <a/>'s moeten gebruiken). Niet dat het moet, maar goed als je weet dat het kan.

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.

Pagina: 1