Galerie✨ Premium

Swipe Gallery

Visionneuse en piste de diapositives que l'on tire au doigt ou à la souris : la photo suit le geste, puis se cale sur la suivante au-delà de 50 px.

JSTouchSwipe

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

Lookbook d'une marque de baskets, parcouru du pouce sur téléphone — Swipe Gallery exemple 1

① Lookbook d'une marque de baskets, parcouru du pouce sur téléphone

QuandSur l'application de Quillerac, la cliente ouvre la Ondrine noire et pousse la photo vers la gauche du pouce : la Ondrine orange arrive en suivant son doigt.
PourquoiSur mobile, feuilleter des produits se fait au pouce, pas en visant de petites flèches ; voir la photo suivre le doigt donne la sensation d'un vrai catalogue.
RéglagesGrille de deux colonnes de vignettes carrées dans un cadre de téléphone, --slb-backdrop: rgba(20, 17, 14, 0.94). Capture : pointerdown, deux pointermove et pointerup de type tactile envoyés à .slb-viewport, un par image de la capture.
Menu d'un food-truck en affiches, tirées à la souris — Swipe Gallery exemple 2

② Menu d'un food-truck en affiches, tirées à la souris

QuandSur le site de Mirabouc, un client au bureau ouvre l'affiche des tacos et tire la piste à la souris pour arriver à la soupe du jour.
PourquoiLe même geste marche à la souris : pas besoin d'une version de bureau à part, et la sortie du curseur hors de la zone n'interrompt pas le glisser.
RéglagesQuatre vignettes au format 5:7 sur une rangée, à côté du planning de la semaine. Les affiches verticales s'affichent entières dans des diapositives 3:2. Capture : mêmes événements, de type souris.
Tutoriel de nœud de chaise en quatre étapes suivies au clavier — Swipe Gallery exemple 3

③ Tutoriel de nœud de chaise en quatre étapes suivies au clavier

QuandSur la page de l'école de voile Ferlouse, l'élève ouvre l'étape 2 et passe à l'étape 3 avec la flèche droite, les mains encore sur le cordage d'entraînement.
PourquoiUn pas à pas se suit dans l'ordre et s'arrête à la fin : l'absence de boucle évite de repartir à l'étape 1 par erreur, le compteur dit où l'on en est.
RéglagesGrille 2 × 2 avec numéro et consigne sous chaque schéma, --slb-backdrop: rgba(6, 22, 33, 0.95). Capture : keydown ArrowRight envoyé au dialog.

Comment ça marche

À la première ouverture, le script construit une diapositive .slb-slide par vignette (avec l'image de data-full, sinon celle de la vignette, et le même alt) et les aligne dans .slb-track. Les images en grand ne sont donc chargées que si quelqu'un ouvre la galerie. Le compteur « 2 / 4 » est calculé d'après le nombre de vignettes.

Le glisser utilise les Pointer Events, avec capture du pointeur : doigt, stylet et souris se comportent pareil, et la souris peut sortir de la zone sans annuler le geste. Pendant le geste, la piste suit le pointeur sans délai ; au relâchement, plus de 50 px vers la gauche passent à la diapositive suivante, plus de 50 px vers la droite reviennent en arrière, sinon la piste revient en place avec un petit rebond (0,4 s). Pas de boucle : on s'arrête à la première et à la dernière.

Une diapositive fait 600 px de large au plus, 80 % de la fenêtre ou ce qu'autorise 70 % de sa hauteur au format 3:2 ; la photo y est affichée entière (object-fit: contain). Sous la piste, l'indication « Glissez pour naviguer » balance sa flèche trois fois puis s'arrête.

Accessibilité

  • Clavier : vignettes en <button> ; dans la visionneuse, ← et → changent de diapositive, Échap ferme. Il n'y a pas de boutons fléchés à l'écran : à la souris, on tire la piste.
  • Lecteurs d'écran : seule la diapositive affichée est lisible (les autres portent aria-hidden="true") ; le compteur « 2 / 4 » est une région aria-live="polite".
  • Dialog modal : nom « Visionneuse d'images », focus sur ✕ à l'ouverture, page derrière inerte, focus rendu à la vignette à la fermeture.
  • Mouvement réduit : pas de zoom à l'ouverture, pas de glissement animé entre diapositives, flèche de l'indication immobile. Le geste reste actif : la piste suit toujours le doigt.
  • Geste vertical : touch-action: pan-y laisse la page défiler verticalement ; un geste vertical annule le glisser et la piste revient en place.

Compatibilité navigateur

Pointer Events et setPointerCapture : Chrome 55, Firefox 59, Safari 13 ; ResizeObserver recale la piste quand la fenêtre change (Chrome 64, Firefox 69, Safari 13.1). Le reste suit le socle des visionneuses (<dialog> modal : Firefox 98, Safari 15.4). Mesuré dans Chromium 151, Firefox 153 et WebKit 26.5 : glisser à la souris qui sort de la zone, flèches sans boucle, balayage tactile à 390 px dans Chromium.

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 ResizeObserver, la position est recalculée à chaque ouverture mais pas pendant un redimensionnement. Sans showModal(), 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-0178-root">
  <div class="slb-grid">
    <button type="button" class="slb-thumb" aria-haspopup="dialog"><img src="photo.jpg" alt="Dégradé rose vers violet" width="600" height="400"></button>
    <button type="button" class="slb-thumb" aria-haspopup="dialog"><img src="photo.jpg" alt="Dégradé ambre vers rouge" width="600" height="400"></button>
    <button type="button" class="slb-thumb" aria-haspopup="dialog"><img src="photo.jpg" alt="Dégradé fuchsia vers rose" width="600" height="400"></button>
    <button type="button" class="slb-thumb" aria-haspopup="dialog"><img src="photo.jpg" alt="Dégradé violet vers cyan" width="600" height="400"></button>
  </div>
  <dialog class="slb-viewer" aria-label="Visionneuse d'images">
    <div class="slb-content">
      <p class="slb-counter" aria-live="polite"><span class="slb-current">1</span> / <span class="slb-total">4</span></p>
      <button type="button" class="slb-close" aria-label="Fermer"><svg>…</svg></button>
      <div class="slb-viewport">
        <div class="slb-track"></div>
      </div>
      <p class="slb-hint"><span>Glissez pour naviguer</span><svg>…</svg></p>
    </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
Seuil de changement (JS — dx < -50 / dx > 50) 50 px Distance à tirer pour passer à la diapositive voisine.
Largeur des diapositives (CSS — .slb-viewport) min(600px, 80vw, calc((100vh - 140px) * 1.5)) Le calcul en vh garde, au format 3:2, la place du compteur et de ✕ au-dessus de l'image et de l'indication au-dessous, même dans une fenêtre basse ; les diapositives prennent toujours 100 % de cette largeur.
Format des diapositives (CSS — aspect-ratio de .slb-slide) 3 / 2 À accorder à vos photos ; changez aussi le 1.5 du calcul de largeur en conséquence.
Écart et rebond (CSS — .slb-track) 20 px, 0,4 s cubic-bezier(0.175, 0.885, 0.32, 1.275) L'écart est relu par le script, rien d'autre à changer.
Texte d'aide (HTML — .slb-hint) « Glissez pour naviguer » Modifiable ou supprimable ; la flèche balance trois fois (animation: slb-hint 1.5s … 3).
Vignettes et voile (CSS — --slb-thumb, --slb-backdrop) 120px, rgba(0, 0, 0, 0.9) Largeur des boutons de la page et fond de la visionneuse.
Grande photo (HTML — data-full) absent Image placée dans la diapositive ; chargée à la première ouverture seulement.

FAQ

Pas par défaut, volontairement. Pour boucler, remplacez dans show() la ligne Math.max(0, Math.min(slides.length - 1, i)) par (i + slides.length) % slides.length ; le glisser fonctionnera alors en boucle aussi.
C'est le principe de cette galerie : on la tire. Le clavier passe par ← et →. Si votre public utilise surtout une souris sans glisser, préférez la visionneuse avec navigation, qui a des flèches.
Non : la zone autorise le défilement vertical (touch-action: pan-y). Un geste vertical laisse la page défiler et la piste reprend sa place.