Galerie✨ Premium

Lightbox with Navigation

Visionneuse qui feuillette toute la galerie : compteur « 2 / 4 », flèches ‹ › qui bouclent, touches ← → et balayage du doigt sur l'image.

JSNavigationKeyboard

Mis à jour le

Cet effet fait partie d'Effect.Labs — 840 effets vanilla, une partie gratuite, une partie premium. Galerie comprend 44 effets, dont 6 gratuits. Découvrir la catégorie →

3 exemples d'usage

Planches d'une BD en ligne, lues une à une au clavier — Lightbox with Navigation exemple 1

① Planches d'une BD en ligne, lues une à une au clavier

QuandSur le site de la série Tressaline, le lecteur ouvre la troisième planche de l'épisode 7 et tourne les pages avec la flèche droite, sans quitter la visionneuse.
PourquoiUne planche est un format vertical qui demande à être vue en grand ; la boucle et le compteur « 3 / 4 » donnent la position dans l'épisode, et le clavier évite de viser les flèches.
RéglagesGrille de quatre colonnes au format 5:7, --nlb-backdrop: rgba(8, 10, 22, 0.94) pour un fond nuit. Capture : la scène ouvre la planche puis envoie un keydown ArrowRight au dialog.
Trois justificatifs attachés à une ligne de note de frais — Lightbox with Navigation exemple 2

② Trois justificatifs attachés à une ligne de note de frais

QuandDans Dravellon, la responsable vérifie la visite client de Camille R. : elle clique sur l'un des trois tickets miniatures puis passe aux deux autres avec ›.
PourquoiLes pièces jointes ne prennent que 36 px de large dans la ligne de dépense ; la visionneuse les montre lisibles et le compteur « 1 / 3 » confirme qu'aucune n'a été oubliée avant de valider.
RéglagesRacine en display: flex dans la ligne, vignettes de 36 px au format 5:7, compteur réglé à 3 dans le HTML (le script le recalcule de toute façon).
Annonce d'un fauteuil d'occasion : une grande photo et trois détails — Lightbox with Navigation exemple 3

③ Annonce d'un fauteuil d'occasion : une grande photo et trois détails

QuandSur la fiche du dépôt-vente Garancelle, l'acheteur ouvre la photo principale puis fait glisser du doigt pour voir le profil, le dossier capitonné et le velours.
PourquoiSur une annonce, on veut vérifier l'état de l'objet sous tous les angles ; le glissement est le geste naturel sur téléphone et la grande photo reste la vitrine de la fiche.
RéglagesGrille de trois colonnes, première vignette sur toute la largeur (classe main ajoutée par la scène). Capture : un pointerdown puis un pointerup près du bord gauche (glissement de presque toute la largeur de l'image) sont envoyés à l'image.

Comment ça marche

La galerie est une suite de boutons .nlb-thumb, chacun avec sa photo. Le script les compte à l'ouverture de la page et écrit ce nombre dans .nlb-total : ajoutez une sixième photo, le compteur affiche « / 6 » sans autre modification. Un clic sur une vignette ouvre le <dialog> modal sur cette image-là.

Dans la visionneuse, ‹ et › (ou ← et → au clavier) passent à l'image voisine ; après la dernière on revient à la première, et inversement. Sur l'image, un glissement horizontal de plus de 50 px au doigt, au stylet ou à la souris fait la même chose (Pointer Events, le geste vertical est ignoré, le pincement pour zoomer reste permis). La grande image vient de data-full si le bouton en a un, sinon de la vignette.

Au-delà de 768 px de large, les flèches flottent à 70 px de part et d'autre de l'image ; en dessous elles passent à l'intérieur, sur un rond sombre, pour ne jamais sortir de l'écran d'un téléphone. Ouverture : fondu du fond et image qui passe de 80 à 100 % en 0,4 s.

Accessibilité

  • Vrais boutons partout : vignettes, ‹, › et ✕ sont des <button> avec un nom (« Image précédente », « Image suivante », « Fermer »).
  • Fenêtre modale : showModal() donne le rôle dialog, rend la page derrière inerte et place le focus sur ✕ ; le dialog s'annonce « Visionneuse d'images ».
  • Compteur annoncé : le paragraphe « 2 / 4 » est une région aria-live="polite", lue après chaque changement d'image ; l'alt de la vignette passe sur la grande image.
  • Fermeture : Échap, ✕ ou un clic sur le fond ; le focus retourne sur la vignette d'origine.
  • Mouvement réduit : plus de fondu ni de zoom à l'ouverture. Changer d'image n'a jamais d'animation, le balayage reste actif.

Compatibilité navigateur

Mêmes bases que la visionneuse simple : <dialog> modal (Firefox 98, Safari 15.4) et aspect-ratio (Chrome et Edge 88). Les Pointer Events et setPointerCapture sont présents depuis Chrome 55, Firefox 59 et Safari 13. Vérifié dans Chromium 151, Firefox 153 et WebKit 26.5, dont un balayage tactile réel à 390 px dans Chromium et le script collé deux fois (→ avance bien d'une seule image).

Chrome 88+✓ Complet (mesuré)
Firefox 98+✓ Complet (mesuré)
Safari 15.4+✓ Complet (mesuré sur WebKit)
Edge 88+✓ Complet (moteur Chromium)
Mobile iOS 15.4+✓ Complet (non mesuré sur appareil)
Android Chrome 88+✓ Complet (toucher mesuré)

Sans showModal(), rien ne s'ouvre et la galerie reste une rangée de photos.

Le code

Structure HTML à coller dans votre page (le CSS + JS sont inclus avec votre achat) :

index.html — structure
<div class="fx-0172-root">
  <div class="nlb-grid">
    <button type="button" class="nlb-thumb" aria-haspopup="dialog"><img src="photo.jpg" alt="Dégradé fuchsia vers rose" width="600" height="400"></button>
    <button type="button" class="nlb-thumb" aria-haspopup="dialog"><img src="photo.jpg" alt="Dégradé violet vers cyan" width="600" height="400"></button>
    <button type="button" class="nlb-thumb" aria-haspopup="dialog"><img src="photo.jpg" alt="Dégradé rose vers violet" width="600" height="400"></button>
    <button type="button" class="nlb-thumb" aria-haspopup="dialog"><img src="photo.jpg" alt="Dégradé indigo vers violet" width="600" height="400"></button>
  </div>
  <dialog class="nlb-viewer" aria-label="Visionneuse d'images">
    <div class="nlb-content">
      <p class="nlb-counter" aria-live="polite"><span class="nlb-current">1</span> / <span class="nlb-total">4</span></p>
      <button type="button" class="nlb-close" aria-label="Fermer"><svg>…</svg></button>
      <button type="button" class="nlb-nav nlb-prev" aria-label="Image précédente"><svg>…</svg></button>
      <img class="nlb-image" alt="">
      <button type="button" class="nlb-nav nlb-next" aria-label="Image suivante"><svg>…</svg></button>
    </div>
  </dialog>
</div>

Paiement unique, sans abonnement — le code est à toi pour toujours

Personnaliser

Options passées à l'API ou attributs data-* :

Option / propriétéDéfautEffet
Largeur d'une vignette (CSS — --nlb-thumb) 120px Les vignettes gardent le format 3:2 ; la rangée passe à la ligne quand la place manque.
Écart de la grille (CSS — --nlb-gap) 10px Espace entre deux vignettes.
Voile (CSS — --nlb-backdrop) rgba(0, 0, 0, 0.9) Fond de la visionneuse ; flèches, compteur et ✕ sont blancs, le voile doit rester foncé.
Coins (CSS — --nlb-radius, --nlb-radius-lg) 0.5rem, 1rem Arrondi des vignettes et de la grande image.
Couleur du survol (CSS — --nlb-accent) rgba(99, 102, 241, 0.3) Ombre portée de la vignette survolée ou atteinte au clavier.
Image haute définition (HTML — data-full) absent À mettre sur un bouton .nlb-thumb : la visionneuse charge cette adresse au lieu de la vignette.
Seuil du balayage (JS — Math.abs(dx) > 50) 50 px Distance horizontale minimale pour changer d'image au doigt ou à la souris.
Durée de fermeture (JS — CLOSE_MS) 400 ms Temps laissé au fondu avant de fermer le dialog ; à changer avec la transition du CSS.

FAQ

Dans show(), remplacez le calcul (i + thumbs.length) % thumbs.length par Math.max(0, Math.min(thumbs.length - 1, i)) : les flèches s'arrêtent alors aux deux bouts.
Oui : chaque image s'affiche à ses proportions, dans la limite de 80 % de la largeur et 70 % de la hauteur de la fenêtre, et les flèches suivent ses bords. Pour un cadre fixe, donnez une largeur et une hauteur à .nlb-image avec object-fit: contain.
Non. Chaque .fx-0172-root a sa propre visionneuse et ses propres écouteurs, posés sur le dialog et non sur le document : la flèche droite ne fait avancer que la visionneuse ouverte.