/
nl-progress-bar

Barre de progression personnalisable Webflow

Ajoutez une barre de progression au scroll (horizontale, verticale ou circulaire) sur Webflow. Script Vanilla JS, responsive et 100% Custom Attributes.

Installation :
≃ 30 minutes
Poids :
4ko
13
May
2026

Description

Un script 100% Vanilla JS pour ajouter une barre de progression de lecture (horizontale, verticale ou circulaire) avec une gestion des offsets selon vos breakpoints.
💡 Le secret de sa flexibilité : Le script calcule la progression en temps réel en fonction de la taille de l'écran et des unités que vous choisissez (px, rem, vh, %). Il gère nativement le redimensionnement de la fenêtre pour éviter les bugs d'affichage sur mobile ou tablette.

Fonctionnalités :

  • 🎯 100% Custom Attributes (Zéro classe CSS) : Construisez et stylisez votre barre directement dans le Designer Webflow (couleur, épaisseur, position). Le script se connecte uniquement via les attributs.
  • 📱 Offsets responsives : Ajustez le point de départ et de fin de la progression avec des valeurs différentes pour Desktop, Tablette et Mobile (ex: 100px, 2rem, 56px).
  • ⚙️ 3 Formats inclus : Fonctionne pour une ligne de lecture classique en haut de l'écran, une barre verticale (sidebar), ou même un anneau circulaire autour de votre menu burger.
  • ⚡️ Zéro Dépendance : Pas besoin de charger GSAP ou d'autres lourdes bibliothèques d'animation pour un simple effet de scroll.

⚠️ Important

  • État initial (Horizontale / Verticale) : Dans le Designer Webflow, pensez impérativement à définir la taille de départ de votre barre d'animation à 0% (Width: 0% pour le mode horizontal, ou Height: 0% pour le mode vertical).
  • Mode Circulaire : Si vous utilisez la valeur circle, votre élément Webflow doit être un code HTML intégré (Embed) contenant un <svg> avec une balise <circle>. Le script ciblera automatiquement le dernier cercle du SVG pour l'animer.
  • Z-Index : N'oubliez pas de donner un z-index élevé à votre barre de progression pour qu'elle passe bien par-dessus votre contenu.

Custom attributes

💡 Cliquez sur l'attribut ou la valeur ci dessous pour le copier !
Attribut
Valeur
Description
nl-progress-bar-src
copied !
is-source
copied !
Optionnel. L'élément à tracker (ex: un rich text). Si absent, le script trackera tout le body par défaut.
nl-progress-bar
copied !
horizontal
copied !
Définit le type d'animation à appliquer.
nl-progress-bar
copied !
vertical
copied !
Définit le type d'animation à appliquer.
nl-progress-bar
copied !
circle
copied !
Définit le type d'animation à appliquer. Pour le mode circle, l'élément doit contenir un SVG avec des balises <circle>
nl-progress-bar-offset-top
copied !
10vh, 2rem, 0px
copied !
Optionnel. Décalage haut. Mettez 1 valeur globale ou 3 valeurs séparées par des virgules (Desktop, Tablet, Mobile).
nl-progress-bar-offset-bottom
copied !
10vh, 2rem, 0px
copied !
Optionnel. Décalage bas. Mettez 1 valeur globale ou 3 valeurs séparées par des virgules (Desktop, Tablet, Mobile).

Installation :

Étape 1 : Ajoutez ce code dans le before body de votre page

<!--{ NL-Progress-Bar }-->
<script src="https://cdn.jsdelivr.net/gh/nicolas-leitao/webflow-scripts/nl-progress-bar.js" defer></script>
Copier

Étape 2 : Choix de la source (Optionnel)

Par défaut, la barre suivra le défilement de la page entière (body). Si vous souhaitez qu'elle ne suive qu'une partie spécifique, ajoutez l'attribut nl-progress-bar-src="is-source" sur la div concernée.

Étape 3 : Création de la barre

  • Pour le mode Horizontal ou Vertical : Pensez absolument à définir la taille initiale à 0% dans le Designer Webflow pour éviter un flash visuel au chargement.
  • Pour le mode Circulaire : Ajustez la couleur du cercle via la couleur de typographie du parent et réglez si besoin l'opacité du cercle rouge à 0 pour qu'il soit transparent.

Progress bar horizontale :

<div nl-progress-bar="horizontal" 
     nl-progress-bar-offset-top="128px, 128px, 112px" 
     nl-progress-bar-offset-bottom="50vh" 
     class="progress-bar-horizontal" 
     style="width: 0%;">
</div>

Progress bar verticale :

<div class="container-absolute">
  
  <div class="container-sticky">
    
    <div nl-progress-bar="vertical" 
         nl-progress-bar-offset-top="128px, 128px, 112px" 
         nl-progress-bar-offset-bottom="50vh" 
         class="progress-bar-vertical" 
         style="height: 0%;">
    </div>

  </div>

</div>

Progress bar ring :

HTML :
<div nl-progress-bar="circle" 
     nl-progress-bar-offset-top="128px, 128px, 112px" 
     nl-progress-bar-offset-bottom="50vh" 
     class="nl-burger-component">

  <div class="progress-bar-circle w-embed">
    <svg viewBox="0 0 60 60" style="width: 100%; height: 100%; pointer-events: none;">
      
      <circle r="28" cx="30" cy="30" fill="transparent" stroke="transparent" stroke-width="2"></circle>
      
      <circle class="progress-circle" r="28" cx="30" cy="30" fill="transparent" stroke="currentcolor" stroke-width="2"></circle>
    </svg>

    <style>
      .progress-circle {
        transform-origin: center;
        transform: rotate(-90deg);
        transition: stroke-dashoffset 0.1s linear;
      }
    </style>
  </div>

  <div class="nl-wrapper-burger-line">
    <div class="nl-burger-line"></div>
    <div class="nl-burger-line"></div>
    <div class="nl-burger-line"></div>
  </div>

</div>
SVG (code embed) :
<svg viewBox="0 0 60 60" preserveAspectRatio="xMidYMid meet" 
     style="width: 100%; height: 100%; pointer-events: none;">
     
    <circle r="28" cx="30" cy="30" 
            fill="transparent" 
            stroke="#FF0000" 
            opacity="0.2"
            stroke-width="2">
    </circle>
    
    <circle class="progress-circle" r="28" cx="30" cy="30" 
            fill="transparent" 
            stroke="currentcolor" 
            stroke-width="2"
            stroke-dasharray="176 176"
            stroke-dashoffset="176">
    </circle>
</svg>

<style>
.progress-circle {
    transform-origin: center;
    transform: rotate(-90deg);
    transition: stroke-dashoffset 0.1s linear;
}
</style>

💡 À savoir : Le script ciblera toujours la dernière balise <circle> trouvée dans le SVG. Vous pouvez donc créer un premier cercle gris clair pour faire "le fond de la piste", et utiliser le second pour la couleur de progression !

Étape 4 : Gestion des Offsets (Décalages)

Ajustez les attributs nl-progress-bar-offset-top et nl-progress-bar-offset-bottom selon vos besoins. Vous pouvez utiliser 1, 2 ou 3 valeurs séparées par des virgules pour gérer le responsive (Desktop, Tablette, Mobile). Le script convertit nativement les unités, vous pouvez utiliser ce que vous voulez ;)

🍪 Cookies ?
J'utilise des cookies pour améliorer votre expérience sur mon site ainsi qu'à des fins de statistiques et de mesure d'audience.
Préférences des cookies
La confidentialité est importante pour moi, vous avez donc la possibilité de désactiver certains types de cookies qui peuvent ne pas être nécessaires au fonctionnement de base du site Web. Le blocage des catégories peut avoir un impact sur votre expérience sur le site Web. Plus d'informations
Nécessaires
Ces cookies sont indispensables pour naviguer sur le site et ne peuvent pas être désactivés.
Toujours actifs
Préférences
Ces éléments permettent au site Web de mémoriser les choix que vous faites (tels que votre nom d'utilisateur, votre langue ou la région dans laquelle vous vous trouvez) et offrent des fonctionnalités améliorées et plus personnelles.
Statistiques
Ces éléments m'aident à comprendre comment mon site Web fonctionne, comment les visiteurs interagissent avec, et s'il peut y avoir des problèmes techniques.
Marketing
Ces éléments sont utilisés pour diffuser des publicités plus pertinentes pour vous et vos intérêts.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.