Registreren

    Informatie

    Het is heel gemakkelijk om lid te worden. Door je gegevens op te geven op de registratie pagina ontvang je automatisch een email met je inlog gegevens.

  • Registreer je hier

Aanmelden

    Informatie

    Omdat je niet aangemeld bent is het gebruikerspaneel niet beschikbaar. Vul hiernaast je gegevens in om gebruik te maken van het gebruikerspaneel.

Aanmeldformulier


Het definitieve uitklapmenu

JavaScript is een scripttaal die veel gebruikt wordt om webpagina's interactief te maken en webapplicaties te ontwikkelen.

De syntaxis van JavaScript vertoont overeenkomsten met de programmeertaal Java. Omdat beide talen het meest zichtbaar zijn op en rond de browser, maar vooral door de naamgeving, worden ze vaak met elkaar verward. De gelijkenis houdt daar echter op, want JavaScript heeft inhoudelijk meer gemeen met functionele programmeertalen, het biedt prototype-gebaseerde overerving en niet, zoals Java en de meeste objectgeoriënteerde talen, klasse-gebaseerde overerving.

Het definitieve uitklapmenu

Berichtdoor Funkwurm » 09 Sep 2008 21:11

Inleiding
Iets wat veel terug komt op website's zijn menu's, en er zijn dan ook veel manieren om een menu te maken. Dit is er een van. Om dit script te gebruiken moet je het volgende doen.


Maak een menu
Maak een simpel HTML menu met de <ul> en <li> tags. Wat vooral de bedoeling is is dat je dit nest, dus dat een <li> ook weer een <ul> bevat die op zijn beurt natuurlijk weer <li>'s heeft, enz. Zorg dat de allerbuitenste <ul> als id menu heeft, zoals in dit voorbeeld:

HTML
Code: Alles selecteren
<ul id="menu">
   <li>Item 1</li>
   <li>Item 2
      <ul>
         <li>Subitem 2.1</li>
         <li>Subitem 2.2</li>
      </ul>
   </li>
   <li>Item 3</li>
</ul>


De code
Voeg deze code toe aan je pagina, je kunt de CSS naar eigen smaak wijzigen, maar hou eigenschappen die betrekking hebben op positionering in tact.

Javascript
Code: Alles selecteren
<style type="text/css">
/* CSS and JavaScript done by funkwurm and dexus */
ul {
   list-style:none;
   margin:0;
   left:1em;
   border-top:1px solid #ccc;
   position:relative;
   padding:0 0 1em;
   width:120px;
}
li {
   cursor:default;
   margin:0;
   padding:0;
   position:relative;
   border: 1px solid #ccc;
   border-top:0;
   background-color:#fff;
}
li.sub {
   border-right:6px solid #0a0;
   cursor:pointer;
}
ul.sub {
   display:none;
   position:absolute;
   top:0;
   left:120px;
}
</style>
<script type="text/javascript">
function Node(obRef)
{
   this.obRef=obRef;
   this.timeRef=null;
}
myNodes=new Array();

function isParent(kind, ouder)
{
   oudere=kind.parentNode;
   do
   {
      oudere=oudere.parentNode;
      if (oudere==ouder)
      {
         return true;
      }
   }
   while (oudere.nodeName!='BODY')
   return false;
}

function showSub(showNode)
{
   if (isNaN(showNode.rIndex))
   {
      showNode.rIndex=myNodes.length;
      myNodes[showNode.rIndex]=new Node(showNode);
   }
   else
   {
      clearTimeout(myNodes[showNode.rIndex].timeRef);
   }
   temp='';
   for (i in myNodes)
   {
      if (!isParent(myNodes[i].obRef, showNode))
      {
         clearTimeout(myNodes[i].timeRef);
         doHide(myNodes[i].obRef);
      }
   }
   for (i in showNode.childNodes)
   {
      if (showNode.childNodes[i].nodeType==1)
      {
         showNode.childNodes[i].style.display='block';
      }
   }
}

function hideSub(hideNode)
{
   myNodes[hideNode.rIndex].timeRef=setTimeout('doHide(myNodes['+hideNode.rIndex+'].obRef)', 500);
}

function doHide(doNode)
{
   for (i in doNode.childNodes)
   {
      if (doNode.childNodes[i].nodeType==1 && doNode.childNodes[i].nodeName=='UL')
      {
         doNode.childNodes[i].style.display='none';
      }
   }
}
window.onload=function()
{
   var li = document.getElementById('menu').getElementsByTagName('li');
   var ul;
   for (i in li)
   {
      if(!isNaN(i))
      {
         ul = li[i].childNodes;
         for(j in ul)
         {
            if(ul[j].nodeName == 'UL')
            {
               ul[j].className = li[i].className = 'sub';
               li[i].onmouseover = function ()
               {
                  showSub(this);
               }
               li[i].onmouseout = function ()
               {
                  hideSub(this);
               }
            }
         }
      }
   }
}
</script>


Voorbeeld
Een voorbeeld kun hier vinden. Bekijk hem ook eens terwijl je javascript uitgeschakeld hebt, of in een tekstuele browser zoals lynx op linux. Omdat de HTML alleen simpele <ul>'s en <li>'s zijn is je menu ook in deze browsers bruikbaar.
Funkwurm
Oud Teamlid
 
Berichten: 373
Geregistreerd: 06 Nov 2005 16:56
Woonplaats: Groningen

Terug naar JS



Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast


cron