formateur informatique

Navigation Javascript par onglets

Accueil  >  Technique  >  Javascript  >  Javascript Astuces  >  Navigation Javascript par onglets
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Navigation par onglets

C'est à l'occasion de cette nouvelle astuce Javascript que nous allons apprendre à donner vie à un système de navigation par onglets. Son rôle est d'offrir de riches informations sur une même page Web sans la surcharger. L'objectif est d'afficher ces informations seulement sur demande, soit au clic de l'utilisateur, précisément sur l'onglet choisi.

Afficher le contenu des rubriques Html aux clics sur des onglets par le code Javascript

Dans l'exemple illustré par la capture, lorsque l'utilisateur clique sur un onglet, l'article attenant s'affiche aussitôt en lieu et place du précédent. L'aspect de ces onglets change au survol. De plus, ils se parent d'une couleur différente lorsqu'ils restent actifs. Ce mécanisme offre une qualité de consultation par thème plutôt intéressante.

Sources et présentation
Pour la mise en place de cette technique Javascript, nous proposons d'appuyer l'étude sur des sources offrant une page Web embarquant ces onglets déjà structurés par les styles Css. L'objectif est comme nous l'avons annoncé, de les articuler par le code Javascript. La décompression livre le fichier de la page Web (index.htm) accompagné de ses ressources dans les sous dossiers dont les feuilles de styles dans le sous dossier Css.
  • Double cliquer sur le fichier index.html pour l'afficher dans le navigateur Web par défaut,
Comme nous l'avons avancé, les onglets structurés existent bel et bien. Ils réagissent d'ailleurs au survol de la souris grâce à un style Css. En revanche à ce stade, au clic de la souris sur l'un d'entre eux, rien ne se produit encore.
  • A la racine du dossier de décompression, cliquer droit sur le fichier index.htm,
  • Dans le menu contextuel, choisir de l'ouvrir avec un éditeur comme le Notepad ++,
Nous accédons ainsi à la structure Html de la page Web. Deux feuilles de styles sont présentes en entête de code dans la section head :

...
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="css/mes-styles.css">
<link rel="stylesheet" href="css/les-styles.css">

<style>
...


La première mes-styles.css se charge de l'organisation globale de la page Web. La seconde gère l'agencement des éléments du système de navigation. Nous aurons l'occasion d'en découvrir quelques attributs.

La construction du système de navigation à onglets est située plus bas dans le code Html. Elle intervient dans le calque d'identifiant auCentre.

...
<div id="auCentre">
<div class="barre">
<button class="onglet actif" onclick="ouvrirOnglet(event,'Css')">Css</button>
<button class="onglet" onclick="ouvrirOnglet(event,'Javascript')">Javascript</button>
<button class="onglet" onclick="ouvrirOnglet(event,'Php')">Php</button>
</div>

<div id="Css" class="rubrique"><!--On garde rubrique pour reconnaître par code Javascript-->
<h1>Les styles Css</h1>
<p>Les <strong>CSS</strong> sont des feuilles de styles en cascade... ...En savoir plus sur les styles Css</u></a>
</p>
</div>

<div id="Javascript" class="rubrique" style="display:none">
<h1>Le code Javascript</h1>
<p>Le <strong>code Javascript</strong> est ce que l'on appelle un <strong>code client</strong>...
En savoir plus sur le code Javascript</u></a>
</p>
</div>

<div id="Php" class="rubrique" style="display:none">
<h1>Le code Php</h1>
<p>Le <strong>code PHP</strong> s'exécute quant à lui sur le<strong>serveur</strong>...
En savoir plus sur le code Php</u></a>
</p>
</div>
</div>
...


Les premiers éléments à considérer sont les styles Css affectés aux objets Html. Chaque onglet est représenté par un bouton (balise button) associé au style onglet. Vous pouvez consulter ce dernier en ouvrant la feuille de styles les-styles.css depuis le sous dossier Css.

...
.onglet
{
padding:8px 16px;
float:left;
width:auto;
border:none;
display:block;
border:none;
vertical-align:middle;
color:inherit;
background-color:inherit;
text-align:center;
cursor:pointer;
}
...


Il réalise des réglages relativement conventionnels. Mais l'un d'entre eux est primordial. Il concerne la valeur left passée à l'attribut float. C'est ainsi que les boutons dont l'aspect est transformé par les styles, acceptent de se positionner les uns à côté des autres. Pour le premier de ces onglets, le style est doublé : onglet actif.

...
.actif
{
color:#edeeee;
background-color:#a13638;
}
...


C'est lui que nous devrons affecter par le code Javascript à l'onglet cliqué pour le faire ressortir dans des jeux de couleurs le mettant en évidence.

Vous remarquez aussi la présence du style dérivé onglet:hover. Son gestionnaire gère le passage de la souris au-dessus de chaque bouton, donc de chaque onglet.

...
.onglet:hover
{
color:#2b579a;
background-color:#edeeee;
}
...


Les contenus des onglets sont quant à eux inscrits dans des calques (balises div), placés les uns en dessous des autres. Ils sont tous associés au style rubrique qui réalise des réglages on ne peut plus classiques. Mais surtout, vous remarquez qu'un style supplémentaire est greffé à la volée dans le flux du code Html : style="display:none". Cela signifie que seul le contenu du premier onglet est visible au chargement de la page Web. C'est sur cette propriété que le code Javascript devra agir dynamiquement pour afficher le contenu correspondant à l'onglet cliqué. Lorsqu'un calque est invisible (display:none), ceux du dessous remontent à hauteur.

A ce titre, vous pouvez constater que chaque onglet appelle la fonction ouvrirOnglet au clic : onclick="ouvrirOnglet(event,'Css')". Deux paramètres lui sont passés. Le premier event est un objet Javascript qui correspond au contexte de l'objet cliqué. Ainsi transmis à la fonction, il va livrer des propriétés permettant de diriger l'objet appelant pour le mettre en valeur. Le second désigne l'identifiant du calque embarquant le contenu associé pour pouvoir l'afficher dans le même temps.

Cette fonction existe déjà en bas du code Html, dans la section de script. Mais bien entendu, elle est vide de code Javascript pour l'instant.

...
<script type="text/javascript" language="javascript">
function ouvrirOnglet(evt, nomRubrique)
{

}

</script>
...


Déclarer les variables
Pour faire interagir ces onglets avec l'internaute, nous avons besoin d'une variable (tableau) récoltant tous les onglets, d'une autre récoltant toutes les rubriques correspondantes et d'une dernière pour les parcourir tous. C'est ainsi et parexemple que nous serons en mesure de masquer toutes les rubriques pour à l'issue, ne garder active que celle associée à l'onglet cliqué. Le calque affiché remontera naturellement au niveau des calques masqués au-dessus de lui. Et c'est ainsi que le système de navigation prendra vie.
  • Dans les bornes de la fonction, ajouter les déclarations et l'affectation suivantes :
function ouvrirOnglet(evt,nomRubrique)
{
var i, tab, onglets;
tab = document.getElementsByClassName("rubrique");

}


Nous déclarons donc trois variables. Les variables tab et onglets doivent représenter respectivement les calques des rubriques et les éléments Html des onglets. C'est ainsi que nous pourrons les parcourir dans une boucle. C'est la raison pour laquelle nous déclarons une variable de boucle (i) qui servira de compteur. C'est alors la méthode getElementsByClassName de l'objet Javascript document qui renvoie la collection des éléments Html en fonction du nom du style commun passé en paramètre. Désormais, la variable tab est un tableau de variables mémorisant tous les calques associés au style rubrique.

Parcourir et masquer les calques
Grâce à ce tableau, nous sommes en mesure de parcourir tous ces calques pour affecter leur attribut Css display afin de les masquer tous dans un premier temps.
  • A la suite du code de la fonction, créer la boucle suivante :
...
for (i = 0; i < tab.length; i++)
{
tab[i].style.display = "none";
}
...


C'est la propriété length d'un tableau de variables qui renseigne sur le nombre d'éléments qu'il contient. Ici, il s'agit du nombre de calques à parcourir. Nous partons donc du premier (0) pour rejoindre le dernier (i < tab.length) grâce à l'incrémentation de la variable de boucle. Et pour chaque calque donc (tab[i]), nous atteignons l'attribut Css display par le biais de sa propriété style afin de le régler à none et ainsi afin de les masquer tour à tour.

Parcourir et désactiver les onglets
C'est la même technique que nous devons reproduire pour les onglets. Seul doit rester actif l'onglet de la rubrique cliquée. Nous devons donc les parcourir tous pour supprimer le potentiel style nommé actif dans un premier temps, avant de ne l'attribuer ensuite qu'au bouton concerné. Mais avant cela, nous devons récupérer tous ces éléments Html dans le tableau de variables déclaré à cet effet.
  • A la suite du code de la fonction, ajouter les instructions Javascript suivantes :
...
onglets = document.getElementsByClassName("onglet");
for (i = 0; i < onglets.length; i++)
{
onglets[i].className = onglets[i].className.replace(" actif","");
}
...


Comme précédemment, c'est bien la méthode getElementsByClassName qui permet de récupérer la collection des onglets que nous stockons dans la variable onglets. Dès lors, nous les parcourons tous, là encore, selon la même méthode que précédemment. Puis, nous exploitons la méthode replace sur la propriété className de l'onglet en cours d'analyse pour supprimer le style actif précédé d'un espace. Pour cela, nous le remplaçons par une chaîne vide ("").

Activer l'onglet - Afficher la rubrique
Maintenant que tous les onglets sont désactivés et que toutes les rubriques sont masquées, nous pouvons activer l'onglet dont la trace est passée en premier argument de la fonction. De même, nous pouvons afficher la rubrique correspondante dont l'identifiant est passé en second paramètre de la fonction.
  • A la suite du code de la fonction, ajouter les deux instructions Javascript suivantes :
...
document.getElementById(nomRubrique).style.display = "block";
evt.currentTarget.className += " actif";
...


Grâce à la méthode getElementById de l'objet Javascript document, nous pointons sur le calque à afficher, reconnu par son identifiant passé en argument de la fonction. C'est alors l'attribut Css display de sa propriété style que nous basculons sur la valeur block pour l'afficher dans le flux des éléments Html. Ensuite, c'est la propriété currentTarget de l'objet evt qui permet de pointer sur l'onglet qui appelle la fonction. Dès lors, grâce à sa propriété className, nous lui ajoutons (+=) le style actif pour le mettre en valeur.
  • Enregistrer les modifications (CTRL + S) puis basculer sur le navigateur Web,
  • Rafraîchir la page avec la touche F5 du clavier,
  • Puis, tour à tour, cliquer sur les trois onglets du système de navigation,
Navigation par onglets en Javascript

Comme vous le constatez, en même temps que l'onglet cliqué devient actif, sa rubrique s'affiche en lieu et place des autres calques Html. Notre système de navigation par onglets est donc abouti, avec un code Javascript relativement simple :

function ouvrirOnglet(evt,nomRubrique)
{
var i, tab, onglets;
tab = document.getElementsByClassName("rubrique");

for (i = 0; i < tab.length; i++)
{
tab[i].style.display = "none";
}

onglets = document.getElementsByClassName("onglet");
for (i = 0; i < onglets.length; i++)
{
onglets[i].className = onglets[i].className.replace(" actif","");
}

document.getElementById(nomRubrique).style.display = "block";
evt.currentTarget.className += " actif";
}


 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn