Accueil > > > MENU DYNAMIQUE MULTINIVEAUX, MULTIFONCTIONS,
MENU DYNAMIQUE MULTINIVEAUX, MULTIFONCTIONS,
Information sur la source
Description
Menu visitable à cette adresse : http://moncastel.9online.fr/menu_deroulant
Source
<!--// Michel Deboom septembre 2004 menu largeur auto,flèches txt
var delai,menu,dul,db,class_menu;pause=1500;D=document;wul1=0;
ie=D.all?1:0;op=window.opera?1:0;dtd=D.compatMode=="CSS1Compat"?1:0;
// paramétrage :
// flèches pour niveau horizontal, vertical ou vertical à droite
flh='...'; flg='?'; fld='?';
flc=ie?4:8 ;// espace pour la flèche
//correction bug padding+border ie et opéra non dtd
da=10 // des liens
dul=(ie&!dtd)?4:0; // des ul
danc=(ie&!dtd)?10:0;// hauteur du div "ancre_menu"
function initMenu(id_menu,class_menu){
de=ie&!op&&dtd?D.documentElement:D.body //exception IE6 dtd
fx=ie&!op?de.clientWidth:innerWidth-20 //l fenêtre
menu=D.getElementById(id_menu);
wul=[] // tableau des largeurs de sous-menus
as=menu.getElementsByTagName('a');
sousMenu=menu.getElementsByTagName('ul');
elem=document.getElementsByTagName('select');
// ajoute a href="#" dans les li sans lien .
lis=menu.getElementsByTagName('li');
for(i=0;i<lis.length;i++){var L=lis[i];
if(L.firstChild.tagName!="A"){
titre=L.firstChild.data;L.removeChild(L.firstChild);
L.innerHTML='<a href="#">'+titre+'<\/a>'+L.innerHTML;L.className="titre"
}
else L.className="lien" // avec url
}
//ajoute un id aux sous-menus
for(j=0;j<sousMenu.length;j++){sousMenu[j].id="ul"+j;wul[j]=0
}
//construction du menu :
for(i=0;i<as.length;i++){
lien=as[i];wa=lien.offsetWidth;
smenu=lien.parentNode.getElementsByTagName('ul')[0]?1:0;
if (smenu)wa+=flc;
// 1er niveau horizontal
if(lien.parentNode.parentNode.id==id_menu){
if(class_menu=="mh"){if(smenu&&lien.innerHTML!="")lien.innerHTML+=flh;
wa=lien.offsetWidth;wul1+=wa+da;
}
else { // vertical
if(wa>wul1){wul1=wa+da;};
// ajoute les fléches
if(smenu){lien.innerHTML=(class_menu=="vd")?'<span class="fl">'+fld+'</span>'+
lien.innerHTML:lien.innerHTML+'<span class="fl">'+flg+'</span> ';}
}
}
//autres niveaux verticaux
else {
n=eval(lien.parentNode.parentNode.id.substr(2,2));
if(wa>wul[n]){wul[n]=wa;};
// ajoute les fléches
if(smenu)lien.innerHTML=(class_menu=="vd")?'<span class="fl">'+fld+'</span>'+
lien.innerHTML:lien.innerHTML+'<span class="fl">'+flg+'</span> ';
}
//ajoute les évènements.
lien.onmouseover=lien.onfocus=function(){
ul_parent=this.parentNode.parentNode;
ul=this.parentNode.getElementsByTagName('ul')[0]
ef(ul_parent); // cache tout après l'ul parent
if(ul){ul.style.visibility="visible";// montre l'ul enfant
(class_menu=="vd")?ul.style.right="100%":
(class_menu=="mh"&&ul_parent.id!=id_menu)||(class_menu=="vg")?ul.style.left="100%":0;
this.className="suivi"; // marquage du suivi de lien
voirSelect('hidden');
}
}; lien.onmouseout=function(){delai=setTimeout('eftout()',pause)};
}
//fixe la largeur du 1er menu :
if(wul1)menu.style.width=wul1+dul+"px";
//largeur des sous-menu verticaux et de leurs liens :
for(var x=0;x<wul.length;x++){
ula=sousMenu[x].getElementsByTagName('a');dda=(ie&!dtd)?da:0;
for(var i=0;i<ula.length;i++){ula[i].style.width=wul[x]+dda+"px";
}
sousMenu[x].style.width=wul[x]+da+dul+"px";
}
lien.onblur=D.onclick=eftout // pour navigation clavier IE
menu.className=class_menu; //activation retardée de la feuille de style
// replace les flèches des menus verticaux au bons endroits.
span = menu.getElementsByTagName('span');
for(i=0;i<span.length;i++){A=span[i].parentNode;c=span[i].style;
if(span[i].className=="fl"){
c.top=A.offsetTop+2+"px";c.left=(class_menu=="vd")?4+"px":A.offsetWidth-8+"px";
}
}
ancremenu();
}
function ancremenu(){ancre=D.getElementById('ancre_menu');
if(ancre){
ancre.appendChild(menu);
with(ancre.style){
height=menu.offsetHeight+danc+'px';width=menu.offsetWidth+dul+'px';
}
}
}
function ef(ul) { //cache les uls qui suivent cet ul.
clearTimeout(delai);
var li=ul.getElementsByTagName('li');
for(i=0;i<li.length;i++){
var ul=li[i].getElementsByTagName('ul')[0];
if(ul){ul.style.visibility="hidden";
li[i].firstChild.className=""; //rétabli le marquage initial
}}}
function eftout(){ef(menu);voirSelect('visible');
menu.style.visibility="hidden";menu.style.visibility="visible";// bug ie
}
// bug ie corrigé : cache les <select> quand le menu est visible
function voirSelect(v){
if(ie&!op){for(i=0;i<elem.length;i++)elem[i].style.visibility=v;}
}
//-->
Conclusion
Comment l'utiliser pour vous ?
1 - Construire votre menu en HTML avec les balises <ul> et <li> avec des liens dans chaque li : <a href="#">description<a>. # à remplacer, par la suite avec votre lien hypertexte réel.
2 - ajouter dans le head : <link rel="stylesheet" type="text/css" media="screen" href="menu.css" /> <script type="text/javascript" src="menu.js"></script> 3 - ajouter id="menu" dans le premier tag ul
4- fonction initMenu( id_menu,class du menu ) à ajouter dans la balise body : <body onload="initMenu( 'menu','mh' )"> mh = style horizontal vg = style vertical à gauche vd = vertical à droite
5- éventuellement, ajouter id="ancre_menu" dans l'élément dans lequel, le menu viendra se coller.
Il est préférable de mettre un doctype valide en en tête du fichier HTML.
Historique
- 12 juillet 2004 00:49:52 :
- Optimisation des largeurs de sous-menus. Modification du menu vertical à droite.
futures options prévues : choix du style et des couleurs par l'utilisateur.
Si j'y arrive bien sûr !!
- 12 juillet 2004 13:14:40 :
- correction bug
- 18 juillet 2004 01:47:59 :
- abandon du chemin
ajouté une page "quirk"
simplifié le js
plus qu'1 seul fichier style pour 3 styles
- 20 juillet 2004 03:22:58 :
- Apparition au changement de page
resolution de bug sur navigation clavier
- 26 juillet 2004 21:39:02 :
- version avec flèches texte sans image d'arrière-plan
- 29 juillet 2004 02:07:14 :
- Comme on m'a dit que ça plantait sur Konqueror, j'ai remplacé les innerHTML par des padding et width sur le menu image, peut-être mieux acceptés.
Si qqun peut vérifier sur linux et mac ?
La version texte continu à utiliser innerHTML.
- 29 juillet 2004 23:31:22 :
- une correction de plus, ça vient bon. ESt-ce qu'un linuxien peut testé sur Konqueror ou Atari ?
- 30 juillet 2004 12:46:43 :
- Testez SVP !!!
- 18 septembre 2004 05:13:31 :
- ajout :
- préférences du visiteur
- 4 menus
- cacher les selects
- 15 janvier 2005 04:11:16 :
- Simplification.
Plus qu'un type de menu avec les flèches au format texte.
- 17 janvier 2005 13:52:24 :
- Correction bug, intégration du menu droit et gauche dans un tableau au pixel prés, avec une petite entorse aux standards.
- 17 janvier 2005 13:57:13 :
- modif du js
- 05 mars 2005 03:13:36 :
- ajouté une class pour les liens avec url
amélioré le style
- 07 mars 2005 13:05:18 :
- Ajouté la class "titre" pour différencier les liens réels des titres du menu
- 07 décembre 2005 12:27:00 :
- Pas 100 % accessible .
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|