Les menus dynamiques en JavaScript font partie des fonctionnalités intérêssantes à installer sur un site, sauf pour ceux qui n'ont pas la chance d'avoir un éditeur WYSIWYG pour le générer de toutes pièces [ ou qui, comme moi, préfèrent travailler entièrement dans le code source pour en maitriser chaque rouage ] car la structure n'est pas toujours évidente à comprendre...
Voici donc la retranscription de la source des menus dynamiques .JS utilisés dans une ancienne interface de ce site, et commentés.
Attention, ce code, même s'il est assez universel [ normalement pris en charge par les versions 4 + d'Internet Explorer et Netscape Navigator sur PC ET par le grand et merveilleusement universel Mozilla, malgré un léger décalage... ] pose encore quelques soucis au Mac, n'as pas été testé par mes soins avec Opéra [ ni sur PC, ni sous Linux ] ni avec les Navigateurs du monde Linux, ni avec Safari sous OS X Jaguar...
de plus, certains sites de WebDesign semblent recommander de ne plus se servir de ce genre de menus à cause des trop grands problèmes avec les navigateurs alternatifs... À vous de voir donc...
Aperçu des >> Menus Dynamiques avec le code source à copier-coller.
Code Source à >> Télécharger [ menu_dynamique.JS : 4,91 Ko ].
1 le premier fichier doit être un .js, du genre « menu_dynamique.js », et contenir le code ci-après (les paragraphes grisés sont des commentaires) :
// Le menu dynamique se présente sous la forme d'un tableau (balise Html <TABLE ...>) de 400 pixels de large sur 20 px de haut, avec l'attribut cellspacing à 1.
// Dans cet exemple, nous avons 4 sections, qui apparaitront chacune dans une colonne de 100 pixels.
// Chacun des sous-menus est aussi un <TABLE ...> de 150 px, et dont le nombre de ligne dépends du nombre d'éléments que l'on veut y voir affiché.
// la Variable posYmenu définie à quelle hauteur se situent les sous-menus. Ici, à 20 px de haut + 2 px à cause du cellspacing.
// Ici, on gère les couleurs des cellules de tableau, en effet, il y a un effet RollOver au passage de la souris ;-)
// bgcolor contient la couleur normale [ quand la souris n'est pas sur la cellule ] et bgcolor2 la couleur alternative [ lorsqu'on survole la cellule ]
// la variable needcenter accepte les valeurs TRUE ou FALSE ; elle sert à définir si on aligne ou pas le menu principal au milieu de la page ou d'un autre élément.
// Si c'est FALSE, on considère que le premier sous-menu se cale tout à gauche.
// si c'est TRUE, on calcule la position de gauche en fonction de la position du menu principal : dans le document lui-même :
// ... ou dans un autre élément au sein du document, à l'aide de innerWidth [ largeur de l'élément courant ].
// dans les deux cas, la valeur de 400 correspond à la largeur du tableau du menu principal.
// Feuille de style des menus, vous pouvez en changer les attributs [ couleur, fontes, décorations, etc... ] mais pas les éléments spécifiques !
// on définie un nouveau Tableau, cette fois dans le sens programmation du terme !! et que l'on appelle t_liens
// pour chacun des éléments du premier tableau, on définie un second tableau de type 'programmation', qui vient s'imbriquer dans celui déjà existant.
// dans le tableau imbriqué, on définie le contenu.
// Le premier numéro entre crochets correspond à la première dimension du tableau t_liens, et les deuxièmes valeurs entre crochets correspondent à chacun des sous-éléments.
// la deuxième paire de crochets doit obligatoirement commencer à zéro, parce qu'en programmation, c'est comme ça ! ;-)
// la chaîne de caractères doit contenir le lien qui servira à définir la destination du lien A HREF, ainsi que son libellé.
// ATTENTION, si vous devez mettre une apostrophe dans le libellé d'un lien à cet endroit, vous devez bien penser à mettre un \ devant, car ce sont déjà des apostrophes qui servent à encadrer le texte...
// ne me demandez pas de vous expliquer à quoi sert cette portion de code, elle y est, et je l'y laisse ;-))
// si jamais vous voulez définir un léger espacement entre le menu et les sous-menus, c'est ici ou null part ailleur !
// la fonction pop sert à écrire les différents tableaux <TABLE ...> correspondant aux différents sous-menus.
// les paramètres d'entrée sont msg, qui correspond à une des dimensions [ numéro de la première paire de crochets ] de la variable t_liens, et pos, qui est le décalagevers la droite à apporter au sous-menu pour qu'il soit toujours juste en dessous du menu.
// le code Html pour définir le tableau qui contient le sous-menu
// pour tous les éléments se trouvant dans la deuxième paire de crochets de la variable t_liens, on écrit une nouvelle ligne <TR>...</TR>, avec le lien saisi plus haut...
// fonction pour masquer les sous-menus...
// ... que l'on appelle dès que l'on clique quelque part dans le document en dehors des sous-menus.
// le tableau tel que présenté tout à l'heure, 400 px de large, etc...
// il n'est pas obligatoire de définir une hauteur de ligne, mais c'est conseillé pour pouvoir facilement renseigner la variable posYmenu ci-dessus.
// la partie la plus délicate à mon avis : voici donc chacune des 4 colonnes du menu. On défini pour chaque cellule sa couleur de fond avec la variable bgcolor. On défini aussi les événements OnMouseOver et OnMouseOut pour le RollOver dans la balise <TD ...>.
// pour l'événement OnMouseOver, on appelle la fonction pop, en passant comme premier paramètre la variable t_liens, avec la dimension correspondant au sous-menu à afficher. Le deuxième paramètre est le décalage vers la droite à apporter. Pour la première cellule, il est égal à 0, pour les suivantes, il faut ajouter la largeur de la(des) cellule(s) précédente(s).
// on met aussi, et c'est bien évident, un lien vers la page par défaut de chacune des sections, avec aussi l'événement OnMouseOver pour faire surgir le sous-menu.
// il faut bien penser à fermer le document...
2 ensuite, dans toutes les pages faisant appel à votre menu dynamique, vous devez mettre cet appel à script à l'endroit précis où doit apparaitre le menu :
<script language="JavaScript" type="text/javascript" src="menu_dynamique.js"></script>
Aperçu des >> Menus Dynamiques avec le code source à copier-coller.
Code Source à >> Télécharger [ menu_dynamique.JS : 4,91 Ko ].