Aller au contenu
BDU Cauri, accueilv0.1.0
ComposantsJavaScript requis

Scrollspy

Scrollspy met à jour automatiquement une navigation selon la section visible dans une zone qui défile. Il convient à une page longue avec sommaire : conditions générales, aide, fiche produit.

Exemple avec une barre de navigation#

Ajoutez data-bs-spy="scroll" et data-bs-target (sélecteur de la navigation) sur la zone qui défile. Chaque lien de la navigation pointe vers l'id d’une section. Ici la zone a une hauteur fixe et tabindex="0", pour être atteignable au clavier.

Ouverture de compte

Présentez une pièce d'identité en cours de validité, un justificatif de domicile de moins de trois mois et un dépôt initial de 10 000 FCFA. Votre conseiller vous remet ensuite votre RIB et vos identifiants.

Le compte est actif dès la validation de votre dossier, en général sous 48 heures ouvrées.

Frais de tenue de compte

Les frais de tenue de compte sont de 1 500 FCFA par mois. Ils sont prélevés le dernier jour ouvré du mois et figurent sur votre relevé.

Les virements entre comptes BDU CI sont gratuits, quel que soit le montant.

Cartes bancaires

La carte Visa Classic est livrée en agence sous cinq jours. Le plafond de retrait est de 500 000 FCFA par jour.

En cas de perte ou de vol, faites opposition immédiatement auprès de votre agence ou par téléphone.

<nav id="spy-barre" class="navbar bg-body-tertiary px-3 mb-2" aria-label="Sommaire du guide">
  <ul class="nav nav-pills">
    <li class="nav-item"><a class="nav-link" href="#spy-ouverture">Ouverture</a></li>
    <li class="nav-item"><a class="nav-link" href="#spy-frais">Frais</a></li>
    <li class="nav-item"><a class="nav-link" href="#spy-cartes">Cartes</a></li>
  </ul>
</nav>
<div data-bs-spy="scroll" data-bs-target="#spy-barre" data-bs-root-margin="0px 0px -40%" data-bs-smooth-scroll="true" class="border rounded p-3 overflow-auto" style="height: 200px;" tabindex="0">
  <h4 id="spy-ouverture">Ouverture de compte</h4>
  <p>Présentez une pièce d'identité en cours de validité, un justificatif de domicile de moins de trois mois et un dépôt initial de 10 000 FCFA. Votre conseiller vous remet ensuite votre RIB et vos identifiants.</p>
  <p>Le compte est actif dès la validation de votre dossier, en général sous 48 heures ouvrées.</p>
  <h4 id="spy-frais">Frais de tenue de compte</h4>
  <p>Les frais de tenue de compte sont de 1 500 FCFA par mois. Ils sont prélevés le dernier jour ouvré du mois et figurent sur votre relevé.</p>
  <p>Les virements entre comptes BDU CI sont gratuits, quel que soit le montant.</p>
  <h4 id="spy-cartes">Cartes bancaires</h4>
  <p>La carte Visa Classic est livrée en agence sous cinq jours. Le plafond de retrait est de 500 000 FCFA par jour.</p>
  <p>En cas de perte ou de vol, faites opposition immédiatement auprès de votre agence ou par téléphone.</p>
</div>

Avec un groupe de liste#

Scrollspy fonctionne aussi avec .list-group ; chaque .list-group-item-action doit pointer vers une section.

Épargne

Le livret rémunéré à 3,5 % par an accepte des versements libres dès 5 000 FCFA. Les retraits restent possibles à tout moment, sans pénalité.

Crédit

Le prêt personnel finance vos projets jusqu'à 10 000 000 FCFA, sur 12 à 60 mois, avec des mensualités constantes.

Assurance

L'assurance emprunteur protège vos proches en cas de décès ou d'invalidité pendant la durée du prêt.

<div class="row g-3">
  <div class="col-4">
    <div id="spy-liste" class="list-group">
      <a class="list-group-item list-group-item-action" href="#spy-liste-epargne">Épargne</a>
      <a class="list-group-item list-group-item-action" href="#spy-liste-credit">Crédit</a>
      <a class="list-group-item list-group-item-action" href="#spy-liste-assurance">Assurance</a>
    </div>
  </div>
  <div class="col-8">
    <div data-bs-spy="scroll" data-bs-target="#spy-liste" data-bs-smooth-scroll="true" class="border rounded p-3 overflow-auto" style="height: 180px;" tabindex="0">
      <h4 id="spy-liste-epargne">Épargne</h4>
      <p>Le livret rémunéré à 3,5 % par an accepte des versements libres dès 5 000 FCFA. Les retraits restent possibles à tout moment, sans pénalité.</p>
      <h4 id="spy-liste-credit">Crédit</h4>
      <p>Le prêt personnel finance vos projets jusqu'à 10 000 000 FCFA, sur 12 à 60 mois, avec des mensualités constantes.</p>
      <h4 id="spy-liste-assurance">Assurance</h4>
      <p>L'assurance emprunteur protège vos proches en cas de décès ou d'invalidité pendant la durée du prêt.</p>
    </div>
  </div>
</div>

Une navigation à deux niveaux est prise en charge : quand une sous-section devient active, son parent est aussi mis en évidence.

Utilisation en JavaScript#

Créez l’instance vous-même pour surveiller le body ou un conteneur précis. Si vous ajoutez ou retirez des sections après la création, appelez refresh().

const spy = new bootstrap.ScrollSpy(document.body, {
  target: '#sommaire',
  rootMargin: '0px 0px -25%',
  smoothScroll: true,
});

// Après avoir ajouté des sections dans la page
spy.refresh();

document.addEventListener('activate.bs.scrollspy', (evenement) => {
  console.log('Lien actif : ' + evenement.relatedTarget.textContent);
});

Options

Les options se passent au constructeur ou par attribut. Le nom d’attribut est data-bs- suivi de l’option en kebab-case (data-bs-root-margin).

Options
OptionTypeDéfautDescription
rootMarginstring'0px 0px -25%'Marges de la zone d’observation (syntaxe CSS). Les valeurs négatives en bas rendent active une section plus tôt.
smoothScrollbooleanfalseDéfilement doux quand on clique sur un lien de la navigation.
targetstring | elementnullNavigation à mettre à jour (obligatoire).
thresholdarray[0.1, 0.5, 1]Seuils de visibilité (de 0 à 1) qui déclenchent la mise à jour.
offsetnumbernullObsolète : conservée pour compatibilité, utilisez rootMargin.

Méthodes

Méthodes
MéthodeDescription
refresh()Recalcule les sections observées. À appeler après un ajout ou un retrait de sections.
dispose()Détruit l’instance.
bootstrap.ScrollSpy.getInstance(element)Renvoie l’instance liée à l’élément, ou null.
bootstrap.ScrollSpy.getOrCreateInstance(element, options)Renvoie l’instance, ou la crée.

Événements

Événements
ÉvénementDéclenché quand
activate.bs.scrollspyUn lien de la navigation devient actif. relatedTarget désigne ce lien. L’événement est émis sur la zone surveillée et remonte dans le document.

Attributs data-bs-*

Attributs data-bs-*
AttributEffet
data-bs-spy="scroll"Active scrollspy sur la zone qui défile (ou sur le body).
data-bs-targetSélecteur de la navigation (.nav, .list-group ou nav contenant des liens).
data-bs-root-marginOption rootMargin.
data-bs-smooth-scrollOption smoothScroll.
data-bs-thresholdOption threshold (valeurs séparées par des virgules).

Variables Sass liées

Scrollspy n’a pas de variable propre : l’aspect du lien actif vient de la navigation ou du groupe de liste cible.

Variables Sass liées
VariableValeur par défautEffet
$nav-pills-link-active-bg$component-active-bgFond du lien actif d’une navigation en pilules.
$nav-pills-link-active-color$component-active-colorTexte du lien actif d’une navigation en pilules.
$nav-link-padding-x1remEspacement horizontal des liens.
$list-group-active-bg$component-active-bgFond de l’élément actif d’un groupe de liste.
$list-group-active-color$component-active-colorTexte de l’élément actif d’un groupe de liste.

Personnalisation#

Pour que les titres ne passent pas sous une barre fixe lors du défilement doux, ajoutez une marge de défilement aux sections.

// Sass : lien actif vert
$nav-pills-link-active-bg: $success;
$list-group-active-bg: $success;

// CSS : décalage des ancres sous une barre fixe de 4 rem
[data-bs-spy="scroll"] [id] {
  scroll-margin-top: 4rem;
}

Bonnes pratiques

À faire

  • Donnez à chaque section un id unique et faites pointer un lien de la navigation vers lui.
  • Fixez une hauteur et overflow-auto sur la zone qui défile, avec tabindex="0" pour l’atteindre au clavier.
  • Appelez refresh() après chaque ajout ou suppression de section.
  • Gardez des sections assez hautes pour que chacune puisse devenir active.

À éviter

  • Ne faites pas dépendre l’accès au contenu de la navigation : tout doit rester lisible sans elle.
  • N’imbriquez pas plus de deux niveaux de navigation.
  • Ne réutilisez pas le même id dans la page : le lien désignerait la mauvaise section.

Accessibilité

  • La zone qui défile doit être focalisable (tabindex="0") pour que le clavier puisse la faire défiler.
  • Entourez la navigation d’un <nav> avec un aria-label, par exemple « Sommaire du guide ».
  • Le lien actif est mis en évidence par la classe .active : n’ajoutez pas aria-current à la main, il n’est pas géré par scrollspy.
  • Le défilement doux (smoothScroll) anime la page : laissez-le désactivé si vos utilisateurs préfèrent moins de mouvement.
Charte provisoire, déduite du site public de la BDU CI. Elle sera remplacée par la charte officielle.