Ajax & JS

Une lightbox sans lightbox

Le 3 novembre 2007 à 11:43 par chris

Vous connaissez certainement tous le script lightbox.js qui vous permet d’afficher des images dans des boite de dialogue ajax. Ce script est excellent mais reste limité en terme de modification et surtout, c’est assez lourd.

Afficher ma boite de dialogue

On commence par créer vos styles css

  1.  
  2. <style type="text/css">
  3.  
  4. #shad {
  5.         position:absolute;
  6.         top:0;
  7.         left:0;
  8.         right:0;
  9.         width:100%;
  10.         height:100%;
  11.         height:6000px;
  12.         z-index:5000;
  13.         background-color:#000000;
  14.         -moz-opacity: 0.6;
  15.         opacity:.60;
  16.         filter: alpha(opacity=60);
  17. }
  18.  
  19. #modbox{
  20.  
  21. display:none;
  22.  
  23. position: absolute;
  24.  
  25. top:50%;
  26.  
  27. left:50%;
  28.  
  29. z-index:9999;
  30.  
  31. width:380px;
  32.  
  33. border:2px solid #EAEAEA;
  34.  
  35. text-align:left;
  36.  
  37. overflow: auto;
  38.  
  39. margin-top: -260px;
  40.  
  41. margin-right: 0;
  42.  
  43. margin-bottom: 0;
  44.  
  45. margin-left: -200px;
  46.  
  47. padding-left: 20px;
  48.  
  49. padding-right: 20px;
  50.  
  51. padding-top: 10px;
  52.  
  53. padding-bottom: 10px;
  54.  
  55. background-color: #E0F5FE;
  56.  
  57. font-size: 18px;
  58.  
  59. font-weight: bold;
  60.  
  61. color: #003366;
  62.  
  63. }</style>

Je vous conseille de ne pas toucher aux style de #shad, par contre, #modbox peut être adapté sans problème

Ensuite, créer ces 2 fonctions JS:

  1.  
  2. <script type="text/javascript">
  3. function showmodal(htmls,wid){
  4.  
  5. var actualposition = document.documentElement.scrollTop ;
  6. var modbox = document.getElementById(‘modbox’);
  7. var shad = document.getElementById(’shad’);
  8. document.body.style.overflow=‘hidden’;
  9. modbox.innerHTML=htmls;
  10. modbox.style.marginTop = (actualposition-260)+"px";
  11. shad.style.display="block";
  12. modbox.style.display="block";
  13. document.getElementsByTagName("html")[0].style.overflow = "hidden";
  14. if (wid) {
  15.         modbox.style.width=wid+‘px’;
  16.         modbox.style.marginLeft=-((wid+20)/2)+‘px’;
  17. }
  18. window.scrollTo(0,actualposition);     
  19.  
  20.  
  21. }
  22.  
  23. function closemodal()
  24.  
  25. {
  26.  
  27. var modbox = document.getElementById(‘modbox’);
  28.  
  29. var shad = document.getElementById(’shad’);
  30.  
  31. modbox.innerHTML=;
  32.  
  33. modbox.style.width=;
  34.  
  35. modbox.style.marginLeft=;
  36.  
  37. shad.style.display="none";
  38.  
  39. modbox.style.display="none";
  40.  
  41. document.body.style.overflow=;
  42.  
  43. document.getElementsByTagName("html")[0].style.overflow = "";
  44.  
  45. }
  46.  
  47. </script>

Comme vous le constaterez, showmodal() permet d’afficher la boite alors que closemodal() la fermera

Pour finir, en dessous de la balise <body> , placer ces 2 div :

  1.  
  2. <div id="shad" onclick="closemodal();" style="display:none"></div>
  3.  
  4. <div id="modbox" style="display:none"></div>

pour afficher la boite de dialogue, vous devez appeler cette fonction:

  1.  
  2. <a href="#" onclick="showmodal(’hello à tous’,300); return false">Cliquez ici</a>

ou encore pour afficher une image

  1.  
  2. <a href="#" onclick="showmodal(’<img mce_tsrc=" alt=""mon" width=""157"" height=""164"">’,160); return false">Cliquez ici</a>

Tester cette fonction

9 commentaires »

Gravatar

Commentaire de Tommy

le 3 novembre 2007 à 12:14

Hmm, sympa ça comme truc ça.. Je sens que je vais le garder bien au chaud ^^

Le seul défaut que je pourrais trouver au script actuel, c’est que la box s’affiche tout en haut de la page. Cela pourrait peut-être être intéressant qu’elle s’affiche à l’endroit où on est dans la page.

Gravatar

Commentaire de eMeRiKa

le 3 novembre 2007 à 12:41

Je l’avais refait ce système aussi. Par contre l’opacité qui donne l’effet gris marche sur tout les navigateurs? J’avais cru lire que non d’où mon utilisation d’une image de background

Gravatar

Commentaire de chris

le 3 novembre 2007 à 13:42

@Tommy, en effet j’avais préféré que la box s’affiche en haut, je viens de mettre à jour. Maintenant c’est ok partout dans la page

@eMeRiKa: Testé chez moi sur FireFox 2, IE6, IE7 et Opera 9.02

Gravatar

Commentaire de Céd'

le 3 novembre 2007 à 13:45

Excellent tuto, merci!

Gravatar

Commentaire de Olivier

le 3 novembre 2007 à 23:57

Bien joué. Ne manquait à la démo qu’un petit bouton “Fermer”. J’ai du rafraîchir ma page pour revenir au contenu ;)
Je le garde aussi “au chaud”.

Gravatar

Commentaire de Tommy

le 4 novembre 2007 à 0:49

Olivier > Il suffit de cliquer n’importe ou sur la fenêtre pour la fermer ;)

Gravatar

Commentaire de bruno bichet

le 4 novembre 2007 à 4:20

Sympa, simple et efficace, pour info, il existe la déclaration pour konqueror qui peut être utile pour gérer l’opacité : -khtml-opacity: 0.6

Gravatar

Commentaire de shane plasebo

le 10 novembre 2007 à 11:31

Je trouve qu’il y a un decalage entre le lightbox et les textes de la page de reference. Je trouve cela bizarre car les textes, se trouvant dans la partie noir transparent du lightbox, se decalent vers la droite de 4/5 pixel.

Gravatar

Commentaire de joakim

le 11 novembre 2007 à 12:51

et pour afficher contenu d’une page html séparée, ça marche ?

Laisser un commentaire

Votre Nom

Votre E-mail (obligatoire mais ne sera pas publié)

Votre Site ou blog

Votre commentaire

Valid XHTML 1.0 Transitional