Changer de façon dynamique le contenu d'une lightbox

Dans la première partie, nous avons créé une lightbox pour afficher un texte, un formulaire ou une image contenus dans une <div>. Avec une fonction JavaScript, le contenu de la boite peut être ajouté dynamiquement.

Démonstration avec un contenu modifié dynamiquement


Titre pour le contenu (image, formulaire ou autre)
Et ceci est le contenu statique provisoire de la boite.

Contenu dynamique en cliquant...

Pour afficher une image dans la lightbox, cliquer sur la vignette de cette image...


Le code source

Les commandes de l'évènement onclick sont transférées dans un fichier JavaScript, pour être complétées avec des fonctions de chargement d'image.
Et l'on crée une liste de vignettes sur lesquelles l'utilisateur clique pour afficher l'image correspondante dans une boite.

<img src="images/thumb-sea.jpg" width="150" height="150" onclick="openbox('images/small-sea.jpg');">
<img src="images/thumb-vitrage.gif" width="150" height="150" onclick="openbox('images/vitrage.gif');">

L'évènement onclick donne en paramètre l'url de l'image à afficher, qui correspond à la vignette. Ceci devrait être généré automatiquement dans une utilisation en production.

Le code JavaScript:

function openbox(url)
{
  var box = document.getElementById('box'); 
  document.getElementById('filter').style.display='block';
  
  var title = document.getElementById('boxtitle');
  title.innerHTML = url;
  
  var content = document.getElementById('boxcontent');
  content.style.padding="0";
  content.innerHTML = "<img src=" + url + " />";
  box.style.display='block';	
}

On sélectionne successivement:
- la boite firstbox pour l'afficher, ce qui est fait en fin de fonction.
- le champ title pour lui assigner le nom de l'image.
- le champ boxcontent pour y placer l'image

Maintenant que l'on a un fichier JavaScript, on peut simplifier le code HTML pour y déplacer les commandes de fermeture de la boite. On ajoute donc la fonction closebox:

function closebox()
{
   document.getElementById('box').style.display='none';
   document.getElementById('filter').style.display='none';
}

Le bloc à insérer devient plus simplement:

<div id="box">
    <div id="boxheader">
        <span id="boxtitle"></span>
        <span id="boxclose" onclick="closebox()"> </span>
    </div>
    <div id="boxcontent"></div>
</div>

Démonstration

La démo est dans l 'archive.

Edition en mode wysiwyg

En mode visuel, les <div> que l'on ajoute pour la lightbox peuvent cacher le contenu de la page.
Pour éviter cet inconvénient, il convient de rajouter le code lightbox après l'édition de la page. Si l'on veut par la suite modifier le contenu de la page en restant en mode visuel, le bloc doit être provisoirement neutralisé, par exemple en le mettant en commentaire avec les balises <!-- -->.

Téléchargement

Ressources

© 2008-2014 Xul.fr