1) Avant tout, télécharger et placer jQuery
Avant de coder, on ira chercher la dernière version de jQuery. La version compressée pour la production est celle qui nous intéresse. Téléchargez-là et placez le fichier dans le dossier du site.
Dans la foulée, on crée un fichier script.js dans lequel on placera notre code.
On obtient la structure suivante :
Dans le code html, on charge les deux fichiers javascript dans le head de la page, comme ceci
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Un site en une page</title>
<link rel="stylesheet" href="style.css">
<!-- jquery d'abord ! -->
<script src="jquery-3.4.1.min.js"></script>
<script src="script.js"></script>
</head>
2) Formuler clairement ce qu’on veut coder
Une des bases de l’écriture du code, c’est d’être capable d’énoncer de la manière la plus précise possible ce qu’on veut coder.
Dans notre cas, c’est assez simple :
Pour pouvoir tester ce code, nous devons créer des contenus minimaux à afficher.
Pour cela, on va placer un peu de html dans la partie #contenus :
<section id="contenus">
<button id="close">Fermer</button>
<article id="contenu1">
<h2>Contenu numéro 1</h2>
</article>
<article id="contenu2">
<h2>Contenu numéro 2</h2>
</article>
<article id="galerie">
<h2>La galerie</h2>
</article>
</section>
Tous les liens de la navigation se comportent de la même manière : ils provoquent l’affichage d’un contenu spécifique. On peut donc employer une même commande pour tous les liens qui dit "affiche cet article dans la partie #contenus" mais il faut créer un lien logique entre un lien et son contenu. Pour ça on va employer l’attribut "data-contenu" (voir la documentation sur Mozilla) comme ceci :
<header>
<h1>Titre principal</h1>
<nav>
<ul>
<li><a href="#" data-contenu="#contenu1">Information 1</a></li>
<li><a href="#" data-contenu="#contenu2">Information 2</a></li>
<li><a href="#" data-contenu="#galerie">Galerie</a></li>
</ul>
</nav>
</header>
Remarquez que le contenu de l’attribut "data-contenu" correspond aux attribut "id" des articles créés plus haut. C’est ce qui permet de faire la correspondance entre les deux éléments pour le code javascript.
Nous somme maintenant prêt à coder.
Le code javascript
La version minimale de notre code va faire ceci :
– au chargement de la page, cacher #contenus
– quand on clique sur un des liens, cacher tous les articles de #contenus, et n’afficher que celui lié au clic
– puis afficher #contenus
Comme cette fenêtre apparait par dessus une image, on va donner la possibilité de la fermer par un clic.
On a déjà ajouté un élément de type "button" directement dans le tag #contenus, on va ajouter dans javascript le code correspondant
Ça donne ça
$(document).ready(function(){ // quand la page est chargée entièrement, juste avant de l'afficher
$("#contenus").hide(); // cacher #contenus
$("nav a").click(function(){ // quand on clique sur les liens de la navigation
// récupérer le contenu de data-contenu pour le lien cliqué
var lequel=$(this).attr("data-contenu");
$("#contenus article").hide(); // cacher les articles
$(lequel).show(); // montrer celi qui correspond au clic
$("#contenus").fadeIn(500); // afficher #contenus
});
// le bouton close
$("#close").click(function(){
$("#contenus").fadeOut("500");
});
});
Et c’est fait.