Soyez le premier à donner votre avis sur cette source.
Vue 26 372 fois - Téléchargée 3 249 fois
<!--// Michel Deboom février 2005, menu arborescent expansif // sans image ajoutée // paramétrage : idMenu = 'menu' idAncre = 'ancre_menu' // mettre 0 pour désactiver une option : mno = 1 // un seul sous-menu ouvert par niveau lien_ouvert = location // lien ouvert par défaut function initMenu(){ var pm;menuOuvert=[];// tableau des menus ouverts objMenu=document.getElementById(idMenu);objMenu.className='menu'; liste=objMenu.getElementsByTagName('li'); for(i=0;i<liste.length;i++){L=liste[i];lien=L.firstChild.href; if(lien){L.className="normal" // repère le lien de la page en cours if(lien == lien_ouvert){ pm=L.parentNode;L.firstChild.className="lien_page" } } //ajoute un titre cliquable if(L.getElementsByTagName('ul')[0]){ // sous-menu éxistant titre=L.firstChild.data;L.removeChild(L.firstChild); L.innerHTML='<a href="#"title="développer" onkeydown="af(this)" onmousedown="af(this,1);return false">'+titre+'<\/a>'+L.innerHTML; // cache les sous_menus L.getElementsByTagName('ul')[0].style.display="none";L.className="reduit" } } // montre le lien de la page et ouvre les menus parents gf=0;if(pm)while(pm.id!=idMenu && gf<30){af(pm.parentNode.firstChild);pm=pm.parentNode.parentNode} ancreMenu(); } function ancreMenu(){ // déplace le menu construit dans l'élément désigné. ancre=document.getElementById(idAncre); if(ancre){ancre.appendChild(objMenu);ancre.className='ancre_menu'} } function ef(el) { // réduit. with (el){ parentNode.getElementsByTagName('ul')[0].style.display="none"; title="développer";parentNode.className="reduit"; } return false } function af(el,mulot) { // développe un sous-menu . if(mulot)el.removeAttribute('href') // supprime le lien prévu pour la navigation clavier. with(el){sous_menu=parentNode.getElementsByTagName('ul')[0] if(sous_menu.style.display=="none"){ sous_menu.style.display="block";title="réduire";parentNode.className="ouvert"; } else {sous_menu.style.display="none";title="développer";parentNode.className="reduit";} } niveau=0; // un seul menu ouvert par niveau while(sous_menu.id!=idMenu&& niveau<30){niveau++;sous_menu=sous_menu.parentNode.parentNode} if(menuOuvert[niveau] && el!=menuOuvert[niveau] && mno)ef(menuOuvert[niveau]);menuOuvert[niveau]=el; } // Fonction pour ajouter ou enlever un événement sans écraser l'éxistant. function addEvent(obj,evType,fn,capt){ if(obj.addEventListener){obj.addEventListener(evType,fn,capt);return true;} // DOM 2 else if(obj.attachEvent)obj.attachEvent("on"+evType,fn) // IE 5+ else {return false;} } addEvent(window,"load",initMenu) //-->
3 déc. 2004 à 19:54
Franchement super tout est vraiment automatisé, c'est géant...
30 janv. 2005 à 15:36
14 févr. 2005 à 21:53
Est-il toutefois possible de "mémoriser" le dernier choix ?
15 févr. 2005 à 00:53
Dans le cas d'un site avec frames, oui, sinon on peut envisager de transférer le tableau menu_ouvert[] à la page suivante. En PHP c'est peut-être plus facile, mais je ne connais pas.
6 févr. 2009 à 19:16
Il suit cependant bien l'ascenseur ce qui est sympa mais se déplace plus vite !!! Comment y remédier. Je comprends que cela doit venir du CSS position de l'ancre, mais je sais pas comment modifier. En tatonnant cela ne change rien. Bien cordialement. Jack
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.