un menu avec onglets.
Il y en a beaucoups, mais rares sont ceux qui sont aussi simples à mettre en place que le mien, ceux qui utilisent des méthodes objets, et ceux qui proposent une interface d'ajout / supression d'onglets aussi simple...
Source / Exemple :
<html>
<head>
<title>menu à onglets</title>
<script type="text/javascript">
function Onglet(titre){
this.titre=titre;
this.nombre=0;
this.liens=new Array();
this.texte=new Array();
this.add_link=Onglet_add_link;
this.afficher=Onglet_afficher;
}
function Onglet_add_link(texte, lien){
this.liens[this.nombre]=lien;
this.texte[this.nombre]=texte;
this.nombre++;
}
function Onglet_afficher(){
var i;
for (i=0;i<this.nombre;i++){
/*
en ajoutant un target="leftframe" par exemple, on peut facilement choisir la destination du lien.
document.write('<a href="'+this.liens[i]+'"></this.nombre;i++){>'+this.texte[i]+'</a> / ');
}
}
function Onglet_box(){
this.nombre=0;
this.onglets=new Array();
this.ajouter_onglet=Onglet_box_ajouter_onglet;
this.afficher=Onglet_box_afficher;
}
function Onglet_box_ajouter_onglet(titre){
this.onglets[this.nombre]=new Onglet(titre);
this.nombre++;
}
function Onglet_box_afficher(){
11111111111
document.write('<table width="100%"><tr>');
for (i=0;i<this.nombre;i++){
/*
Ici, on peut modifier le style des entêtes
document.write('<td id="header'+i+'" style="background-color:#07F"><a href="javascript:ouvre(\''+i+'\')" >'+this.onglets[i].titre+'</a></td>');
}
document.write('</tr><tr><td colspan="'+this.nombre+'">');
for (i=0;i<this.nombre;i++){
/*
et ici, le style des onglets
document.write('<div id="div'+i+'" style="display:none;background-color:#0AF;">');
this.onglets[i].afficher();
document.write('</div>');
}
document.write('</td></tr></table>');
nombre=this.nombre;
}
function ouvre(id){
a=document.getElementById('div'+id);
for (i=0;i<nombre;i++){
document.getElementById('div'+i).style.display="none";
document.getElementById('header'+i).style.background="#07F";
}
document.getElementById('header'+id).style.background="#7AF"
document.getElementById('div'+id).style.display="block";
}
</script>
</head>
<body>
<script type="text/javascript">
a=new Onglet_box();
a.ajouter_onglet('acceuil');
a.onglets[0].add_link('index','index.php');
a.onglets[0].add_link('index2','index.php');
a.onglets[0].add_link('index1','index.php');
a.ajouter_onglet('acceuil1');
a.onglets[1].add_link('1indeezx','index.php');
a.onglets[1].add_link('1indeszetxqz2','index.php');
a.onglets[1].add_link('1indeztex1','index.php');
a.ajouter_onglet('acceuil3');
a.onglets[2].add_link('2index','index.php');
a.onglets[2].add_link('2index2','index.php');
a.onglets[2].add_link('2index1','index.php');
a.ajouter_onglet('acceuil2');
a.onglets[3].add_link('3index','index.php');
a.onglets[3].add_link('3index2','index.php');
a.onglets[3].add_link('3index1','index.php');
a.afficher();
ouvre(0);
</script>
</body>
</html>
Conclusion :
C'est un menu Orienté Objet, je l'ai fait à l'origine pour quelqu'un d'autre, mais comme c'est aussi une de mes création (que je trouves plutot réussie comparée aux autres menus), je l'exposes...
L'orientation objet permet de faire bien plus de choses qu'on ne le penses... On peut grace à ça faire des menus cohérents, bien plus simples à mettre à jour que les menus classiques.
19 août 2005 à 07:15
° ...rares sont ceux...
° que je trouves plutot réussie comparée
aux autres menus
...etc...etc... quelle modestie !
19 août 2005 à 07:33
Pourquoi ne pas une URL pour voir et donner un aperçu de ton menu...
Ca serait tellement plus simple pour les visiteurs.
Merci si tu nous fais çà
Bonne journée
JPR
19 août 2005 à 10:02
- Ton code ne marche pas (en tout cas en l'état) : " 11111111111" ou le copier/coller de la reste de la boucle fort dans ta fonction init_objet
- Il y a du code mort ("a=document.getElementById('div'+id); ", this.nombre ne sert a rien...)
Ensuite juste sur la forme:
- document.write est à éviter, je pense qu'il est preferable de passer par innerHTML
- pour les functions de ton objet, le code est plus lisible et les portées de fonctions plus explicites si tu fais
this.add_link= function (texte, lien){ .... } plutôt que d'affecter le pointeur sur ta fonction comme tu le fais.
- les tables ne sont pas faites pour ça, tout en div s'aurait été mieux.
Pour conclure, code sympa, mais certainement pas niveau expert.
Amicalement,
Fred
19 août 2005 à 12:00
pour les pointeurs de fonction, c'est vrai que ça simplifierais les choses.
un table pour un onglet, moi je trouves ça plutot pas mal... un div aurait du avoir un display aproprié, pour la border, ça n'aurait pas été facile...
enfin voila, le div ne me plaisait pas...
innerHTML est efficace, j'y ai également pensé, mais il aurait fallu un div pour l'accrocher à la page, et je ne voulais pas forcer le webmaster a mettre du code html suplémentaire pour avoir ce menu.
si je ne propose pas d'exemples en ligne, c'est que je n'ai pas décidé d'utiliser ce menu sur mon site...
pour le niveau expert, je l'ai mis en référence à
http://www.javascriptfr.com/code.aspx?ID=32134 qui n'a qu'un objet, et qui n'est pas compatible firefox...
http://www.javascriptfr.com/code.aspx?ID=31293
celui ci qui peut simplement être remplacé par du css...
et nombre de menus médiocres, sans vrai avancée coté programmation...
le mien n'est pas super joli, mais coté prog, il les dépasse largement...
19 août 2005 à 12:09
for (i=0;i<this.nombre;i++){
/*
en ajoutant un target="leftframe" par exemple, on peut facilement choisir la destination du lien.
*/
document.write('['+this.liens[i]+' </this.nombre;i++){>'+this.texte[i]+'] / ');
--------------------------------------------- là
}
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.