Aller au contenu principal

Comment créer une vidéo qui se lance au scroll avec GSAP

Tutos video qui se lance au scroll

Lors de la sortie du deuxième trailer de GTA 6, Rockstar Games a mis en ligne un site dédié pour présenter leurs persos et leurs lieux (https://www.rockstargames.com/VI). Le site déborde d’animations, et l’une des plus cools, c’est la vidéo qui se lance et avance au scroll.

Je me suis dit : “Tiens, si on recréait ça sur notre propre site, sans plugin ?”

Voilà le tuto.

À quoi ressemble l’animation vidéo-scroll ?

C’est une section plein écran où, en arrivant dessus, une vidéo en mode « scrub » se déroule en synchronisation exacte avec le défilement de la page :

  • Avant d’entrer dans la section, la vidéo est en niveaux de gris.
  • Dès que le haut du conteneur apparaît, elle retrouve ses couleurs.
  • Puis, la vidéo se lit de bout en bout au fur et à mesure que vous scrollez.
  • À la fin, la section se « déclipse » naturellement et le scroll reprend son cours normal.


Cet effet, appelé scroll-triggered video scrub, crée un véritable scrollytelling visuel, captivant et immersif.

Aperçu du code à intégrer

Avant de rentrer dans les détails, découvrons tout de suite le code nécessaire pour réaliser un texte qui défile en boucle. Le script est scindé en deux parties :

  • Un bloc HTML + JavaScript à placer directement dans votre contenu ou dans un module de code personnalisé.
  • Un bloc CSS à coller dans la feuille de style du thème ou dans un plugin de CSS additionnel.

Le JAVASCRIPT/GSAP :

				
					<div class="video-container">
  <video
    id="scrollVideo"
    src="https://gflo.fr/wp-content/uploads/2025/05/IMG_7074.mov"

    preload="metadata"
    muted
    playsinline
    style="display: none;"
  ></video>
</div>

<script type="importmap">
{
  "imports": {
    "gsap": "https://unpkg.com/gsap@3.12.5/index.js",
    "gsap/ScrollTrigger": "https://unpkg.com/gsap@3.13.0/ScrollTrigger.js"
  }
}
</script>

<script type="module">
  import gsap from 'gsap'
  import ScrollTrigger from 'gsap/ScrollTrigger'
  gsap.registerPlugin(ScrollTrigger)

  document.addEventListener('DOMContentLoaded', () => {
    const video = document.getElementById('scrollVideo')
    const container = document.querySelector('.video-container')

    // 1. Pré-charge la vidéo
    video.play().then(() => video.pause())

    video.addEventListener('loadedmetadata', () => {
      video.style.display = 'block'

      const duration = video.duration
      const scrollPx = duration * window.innerHeight

      // on pousse la section suivante
      container.style.height = `${scrollPx + window.innerHeight}px`

      // 2. ScrollTrigger pour le filtre grayscale → couleur
      ScrollTrigger.create({
        trigger: container,
        start: 'top bottom',    // quand le top du container arrive en bas de viewport
        end: 'top top',         // jusqu’à ce qu’il atteigne le top
        scrub: true,
        onUpdate: self => {
          // self.progress va de 0 → 1 : on passe de 100% gris → 0% gris
          const pct = 100 - self.progress * 100
          video.style.filter = `grayscale(${pct}%)`
        }
      })

      // 3. ScrollTrigger pour le scrub de la vidéo et le pin
      ScrollTrigger.create({
        trigger: container,
        start: 'top top',
        end: () => `+=${scrollPx}`,
        scrub: true,
        pin: true,
        anticipatePin: 1,
        onUpdate: self => {
          video.currentTime = self.progress * duration
        }
      })
    })
  })
</script>

				
			

Le CSS :

				
					.video-container {
  position: relative;
  overflow: hidden;
}

/* La vidéo prend 100% de la largeur de ton conteneur Elementor */
.video-container video {
  width: 100%;
  height: auto;
  object-fit: cover;
  pointer-events: none;
  /* initialement 100% grayscale */
  filter: grayscale(100%);
}

				
			
Accédez directement aux sections clés de cet article

g.flo, c’est moi, Florian GEFFROY

Un créateur passionné et un stratège digital qui transforme vos idées en expériences mémorables. Plus qu’un simple nom, g.flo est un concept audacieux : un jeu de mots qui signifie “j’ai Flo” — g.un site web, g.une image de marque, g.une stratégie unique.

Avec g.flo, vous avez :

Un design sur-mesure qui incarne l’ADN de votre marque
Une expérience fluide et engageante pour captiver vos visiteurs
Les dernières tendances UX/UI intégrées à votre projet
Une réalisation efficace et soignée, sans compromis sur la qualité

Prêt à dire « g.flo » vous aussi ?
Testez mon simulateur de devis interactif et obtenez en moins d’une minute une estimation personnalisée pour votre futur site.

Comment intégrer le code sur Elementor

 Ajouter le bloc HTML/JS dans la bonne section

  1. Créer votre section
  2. Mettez-la en pleine largeur et 100 vh, alignez-la et centrez-la.
  3. Choisissez un fond noir pour un contraste maximum.
  4. Ajouter un widget HTML
  5. Collez-y le bloc HTML + JS ci-dessus.
  6. Coller le CSS
  7. Via Apparence > Personnaliser > CSS additionnel, ou dans votre thème enfant.
  8. Insérer votre vidéo
  9. Remplacez ENTREZ_URL_DE_VOTRE_VIDEO_ICI.mp4 par l’URL de votre fichier (YouTube, Vimeo, ou hébergé en local).


Conseil pratique
: Pour éviter toute modification involontaire de votre mise en page, insérez ce script dans une section dédiée. Vérifiez également que votre plugin de sécurité n’empêche pas l’exécution des balises <script>.

Insérer le CSS

Vous avez plusieurs options pour injecter le CSS dans WordPress :

  • Via le fichier style.css de votre thème enfant : Rendez-vous dans Apparence > Éditeur de thème, puis collez les règles à la fin du fichier.
  • Plugin de CSS personnalisé : Utilisez un plugin comme “Simple Custom CSS and JS” pour ajouter vos règles CSS.
  • Personnaliser via l’interface : Accédez à Apparence > Personnaliser > CSS additionnel et collez-y le CSS.

Ajuster l’effet et personnaliser le contenu

L’avantage d’utiliser HTML, CSS et JavaScript directement est la flexibilité offerte :

Créer votre section

  • Mettez-la en pleine largeur et 100 vh, alignez-la et centrez-la.

  • Choisissez un fond noir pour un contraste maximum.


Ajouter un widget HTML

  • Collez-y le bloc HTML + JS ci-dessus.


Coller le CSS

  • Via Apparence > Personnaliser > CSS additionnel, ou dans votre thème enfant.


Insérer votre vidéo

    • Remplacez ENTREZ_URL_DE_VOTRE_VIDEO_ICI.mp4 par l’URL de votre fichier (YouTube, Vimeo, ou hébergé en local).


Idée bonus
: Vous pouvez également ajouter des légendes ou des liens cliquables sur les vidéos pour renforcer l’interactivité.

Points de vigilance

Quelques éléments à surveiller pour une intégration optimale :

  • Compatibilité mobile : Vérifiez le rendu sur smartphone et ajustez la taille des images avec des media queries.
  • Performances : Des vidéos trop longues ou trop lourdes peuvent ralentir votre site. Testez sur différents appareils pour maintenir une expérience fluide.
  • Lisibilité et expérience utilisateur : Assurez-vous que la vidéo ne détourne pas l’attention des contenus essentiels. L’animation doit rester un élément d’agrément, pas de distraction.
  • Accessibilité : Prévoyez éventuellement une alternative ou un moyen d’arrêter la vidéo pour les utilisateurs sensibles aux animations.

3 problèmes courants et comment les résoudre

  1. La vidéo ne se charge pas :
    Vérifiez votre URL, l’importmap et le type="module"

  2. Le scrub est saccadé :
    Allégez la vidéo, augmentez duration de Lenis

  3. La section suivante est chevauchée :
    Assurez-vous que container.style.height = scrollPx + 100vh


Conseil pratique
: Utilisez l’outil de responsive design de votre navigateur (comme l’inspecteur de Chrome) pour vérifier le comportement de l’animation sur mobile et desktop.

Conclusion

Cet effet de « scroll-triggered video scrub » apporte une dimension immersive et dynamique à votre site, digne des plus belles réalisations de Rockstar. Sans plugin, vous gardez le contrôle total sur le rendu et les performances, et vous pouvez l’adapter à votre charte graphique en quelques lignes de code. Testez, ajustez les timings et partagez votre création : vous êtes désormais prêt à épater vos visiteurs à chaque scroll !

Articles complémentaires