1. Page d'accueil
  2. Tutoriels JavaScript

Galerie photo avec JavaScript

Le 08-04-2005 par Collectif Alsacreations dans Tutoriels JavaScript.

​ ​​​​Voici un petit exemple concret d'un cas où JavaScript permet un gain au niveau de la navigation sans entrave à l'accès au contenu au cas où ce dernier soit désactivé. La séparation du contenu et de la partie script permet une facilité de gestion de votre galerie et un allègement du poids des pages, en effet vous n'avez aucun code JavaScript à ajouter dans votre page en elle même, tout est géré par le script et appelé dans la partie <head> de la page.

Il peut être très avantageux d'utiliser le JavaScript pour certaines choses comme notament des galeries photos (ou autre), en effet vous ne rechargez pas la page au clic sur la miniature, la photo en taille réelle est directement affichée sans recharger quoi que ce soit. Les galeries en PHP ne permettent pas ce genre de choses et de plus nécessitent l'accès à cette technologie, ce qui n'est pas toujours le cas notament dans le cas de certains hébergeurs gratuits.

Les codes xhtml et css

Nous allons commencer par voir comment structurer notre code xhtml afin d'agir dessus, il s'agira de présenter les miniatures sous forme de liste non ordonnée et d'ajouter ensuite une zone pour l'image en taille réelle.

<div id="galerie">
	<ul id="galerie_mini">
		<li><a href="images/photo1.png" title="Titre de la photo 1"><img src="images/minis/m_photo1.png" alt="Le titre de la photo 1" /></a></li>

		<li><a href="images/photo2.png" title="Titre de la photo 2"><img src="images/minis/m_photo2.png" alt="Le titre de la photo 2" /></a></li>
		<li><a href="images/photo3.png" title="Titre de la photo 3"><img src="images/minis/m_photo3.png" alt="Le titre de la photo 3" /></a></li>
		<li><a href="images/photo4.png" title="Titre de la photo 4"><img src="images/minis/m_photo4.png" alt="Le titre de la photo 4" /></a></li>

		<li><a href="images/photo5.png" title="Titre de la photo 5"><img src="images/minis/m_photo5.png" alt="Le titre de la photo 5" /></a></li>
		<li><a href="images/photo6.png" title="Titre de la photo 6"><img src="images/minis/m_photo6.png" alt="Le titre de la photo 6" /></a></li>
		<li><a href="images/photo7.png" title="Titre de la photo 7"><img src="images/minis/m_photo7.png" alt="Le titre de la photo 7" /></a></li>

		<li><a href="images/photo8.png" title="Titre de la photo 8"><img src="images/minis/m_photo8.png" alt="Le titre de la photo 8" /></a></li>
		<li><a href="images/photo9.png" title="Titre de la photo 9"><img src="images/minis/m_photo9.png" alt="Le titre de la photo 9" /></a></li>
	</ul>

	
	<dl id="photo">
		<dt>Titre de la photo 1</dt>
		<dd><img id="big_pict" src="images/photo1.png" alt="Photo 1 en taille normale" /></dd>
	</dl>
</div>

		

Nous allons mettre un peu de style dans tout ça pour rendre le tout plus agréable, voici donc un exemple de code css utilisable, à vous d'adapter à vos besoins.

div#galerie
{
	width: 410px ;
	background: #eed ;
	border: 1px solid #dcb ;
	padding: 15px ;
	margin: 15px 30px ;
	text-align: center ;
	font: 0.9em Georgia, serif ;
}

ul#galerie_mini
{
	margin: 0 ;
	padding: 0 ;
	list-style-type: none ;
}

ul#galerie_mini li
{
	float: left ;
}

ul#galerie_mini li a img
{
	margin: 2px 1px ;
	border: 1px solid #dcb ;
}

dl#photo
{
	clear: both ;
	margin: 0 auto ;
}

dl#photo dt
{
	font: italic 2.5em/1.5em Georgia, serif ;
	color: #dcb ;
}

dl#photo dd
{
	margin: 0 ;
}

dl#photo img
{
	border: 1px solid #dcb ;
}
		

Voilà notre galerie mise en place, à ce stade vous pouvez déjà tester le résultat, vous vous rendez compte que les liens sur les miniatures ouvrent les images en taille réelle dans la fenêtre. C'est le comportement que vous aurez si le JavaScript est desactivé, vous voyez donc que l'accès au contenu n'est pas bloqué dans ce cas, vos photos sont alors disponibles normalement. Il ne nous reste alors qu'à faire le script JavaScript pour rendre ceci un peu plus agréable.

La fonction JavaScript gérant la galerie

Il faut maintenant créer la fonction JavaScript qui gérera notre galerie, commençons par l'appeler dans notre page html en plaçant cette ligne dans la partie <head> : <script type="text/javascript" src="script.js"></script>

Il faut maintenant créer le fichier script.js.

function displayPics()
{
	var photos = document.getElementById('galerie_mini') ;
	// On récupère l'élément ayant pour id galerie_mini
	var liens = photos.getElementsByTagName('a') ;
	// On récupère dans une variable tous les liens contenu dans galerie_mini
	var big_photo = document.getElementById('big_pict') ;
	// Ici c'est l'élément ayant pour id big_pict qui est récupéré, c'est notre photo en taille normale

	var titre_photo = document.getElementById('photo').getElementsByTagName('dt')[0] ;
	// Et enfin le titre de la photo de taille normale

	// Une boucle parcourant l'ensemble des liens contenu dans galerie_mini
	for (var i = 0 ; i < liens.length ; ++i) {
		// Au clique sur ces liens 
		liens[i].onclick = function() {
			big_photo.src = this.href; // On change l'attribut src de l'image en le remplaçant par la valeur du lien
			big_photo.alt = this.title; // On change son titre
			titre_photo.firstChild.nodeValue = this.title; // On change le texte de titre de la photo
			return false; // Et pour finir on inhibe l'action réelle du lien
		};
	}
}
window.onload = displayPics;
// Il ne reste plus qu'à appeler notre fonction au chargement de la page
		

Et voilà votre galerie fin prête à être visitée, vous pouvez voir un exemple de ce que ça donne.

Un problème, une question ?

Vous avez des soucis avec ce tutoriel ? Venez en discuter dans le salon Spécifique aux tutoriels et articles du Forum Alsacréations.

  • CSS2
  • Memento XHTML
  • Le zen des CSS
  • CSS
  • Web accessible