smooth scrolling en jquery

Créer un défilement fluide (smooth scrolling) en jQuery, CSS, JS et/ou React

Lorsqu’un utilisateur clique sur un lien interne dans votre site, celui-ci est propulsé abruptement vers une section plus basse. Et si au lieu de cela, il glissait doucement vers la section appropriée, comme une plume qui descend lentement vers le sol?

C’est ça, le smooth scrolling ou le défilement fluide. Il rend l’expérience utilisateur plus élégante, plus intuitive et agréable. Mais comment obtenir cet effet sans sacrifier l’accessibilité ou trop compliquer votre code? Dans cet article, nous allons explorer des solutions simples pour implémenter le défilement fluide avec du CSS, du JavaScript, du jQuery et du React, tout en gardant vos utilisateurs au centre de l’expérience. Prêt à rendre vos sites plus fluides et inclusifs? Allons-y!

Table des matières

Pourquoi le défilement fluide est-il si attirant?

Le défilement fluide, c’est comme offrir à vos utilisateurs une promenade agréable au lieu d’un trajet cahoteux. Il réduit la friction, rend la navigation intuitive et donne à votre site une touche de professionnalisme. Mais il y a un hic: si vous ne faites pas attention, vous pourriez rendre votre site moins accessible pour certains utilisateurs, comme ceux qui naviguent avec un clavier ou un lecteur d’écran. Alors, comment obtenir cet effet sans compliquer les choses? La bonne nouvelle, c’est qu’il existe des solutions simples, et nous allons les décortiquer une par une.

Solution CSS: une astuce native pour un effet fluide

Vous voulez une solution rapide, sans JavaScript ni bibliothèques? CSS a ce qu’il vous faut avec la propriété scroll-behavior. Ajoutez simplement ceci à votre fichier CSS:

html {
  scroll-behavior: smooth;
}

C’est tout! Dès que vous appliquez cette règle, tous les liens d’ancrage (comme <a href="#section1">) déclenchent un défilement fluide sans effort. Pas besoin de charger une bibliothèque lourde ou d’écrire des lignes de code complexes. Mais attention: cette propriété est supportée par la plupart des navigateurs modernes, mais pas par les anciennes versions (comme Internet Explorer). Si vous devez supporter des navigateurs plus anciens, vous devrez peut-être envisager une alternative JavaScript.

Pourquoi est-ce si puissant? Parce que c’est simple, natif et ne demande aucune maintenance. Vous ajoutez une ligne, et votre site devient instantanément plus élégant. Mais si vous avez besoin de plus de contrôle, passons à la solution JavaScript.

JavaScript natif: contrôle total sans dépendances

Vous aimez avoir les mains dans le code? JavaScript offre des méthodes natives pour créer un défilement fluide sans dépendre de bibliothèques externes. Voici trois façons de le faire:

  1. Défiler vers une position spécifique:
    window.scroll({
      top: 2500,
      left: 0,
      behavior: 'smooth'
    });
  2. Défiler d’une certaine distance depuis la position actuelle:
    window.scrollBy({
      top: 100, // peut être négatif pour remonter
      left: 0,
      behavior: 'smooth'
    });
  3. Défiler vers un élément spécifique:
    document.querySelector('.hello').scrollIntoView({
      behavior: 'smooth'
    });

Ces méthodes sont flexibles et modernes, mais si vous supportez des navigateurs plus anciens, vous pourriez avoir besoin d’un polyfill, comme celui proposé par Dustan Kasten. Cela garantit que votre défilement fluide fonctionne partout, même sur des navigateurs obsolètes.

Accessibilité: ne laissez personne derrière

Le défilement fluide, c’est beau, mais il peut poser un problème d’accessibilité. Quand un utilisateur clique sur un lien d’ancrage (comme <a href="#section">), le navigateur change automatiquement le focus vers l’élément cible. Le défilement n’est qu’un effet secondaire de ce changement de focus. Si vous surchargez ce comportement pour activer le défilement fluide, vous devez gérer le focus manuellement pour ne pas désorienter les utilisateurs de lecteurs d’écran ou de navigation au clavier.

Pourquoi cela compte-t-il? Parce que l’accessibilité, c’est inclure tout le monde, pas seulement ceux qui naviguent avec une souris. Heather Migliorisi, une experte en accessibilité, explique comment gérer cela avec des solutions concrètes. Par exemple, après un défilement fluide, vous devez vous assurer que l’élément cible reçoit le focus pour que les utilisateurs de lecteurs d’écran sachent où ils sont.

jQuery: une approche classique avec une touche d’accessibilité

Si vous utilisez déjà jQuery dans votre projet, voici une solution pour un défilement fluide qui inclut la gestion de l’accessibilité:

$('a[href*="#"]')
  .not('[href="#"]')
  .not('[href="#0"]')
  .click(function(event) {
    if (
      location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '')
      &&
      location.hostname == this.hostname
    ) {
      var target = $(this.hash);
      target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
      if (target.length) {
        event.preventDefault();
        $('html, body').animate({
          scrollTop: target.offset().top
        }, 1000, function() {
          var $target = $(target);
          $target.focus();
          if ($target.is(":focus")) {
            return false;
          } else {
            $target.attr('tabindex', '-1');
            $target.focus();
          }
        });
      }
    }
  });

See the Pen
Smooth Page Scrolling in jQuery
by Chris Coyier (@chriscoyier)
on CodePen.

Ce code sélectionne tous les liens contenant un hashtag, exclut ceux qui ne mènent nulle part (comme href="#"), et vérifie que le lien est sur la même page. Ensuite, il anime le défilement vers la cible et gère le focus pour l’accessibilité. Si vous voyez des contours bleus autour des éléments après le défilement, c’est le focus visuel, un signe que vous faites les choses correctement pour l’accessibilité!

React: défilement fluide dans un monde moderne

Pour les développeurs React, le plugin react-scroll simplifie le défilement fluide. Voici un exemple d’utilisation:

<Link
  activeClass="active"
  to="section1"
  spy={true}
  smooth={true}
  offset={-70}
  duration={500}
>

Ce composant permet de défiler vers une section spécifique avec une animation fluide, tout en ajustant l’offset pour éviter que les en-têtes fixes ne masquent le contenu. James Quick propose un tutoriel détaillé pour l’intégrer dans vos projets React, rendant l’implémentation aussi simple qu’un clic.

Conseils pratiques pour une implémentation réussie

Pour que votre défilement fluide soit un succès, voici quelques astuces:

  • Testez l’accessibilité: Utilisez un lecteur d’écran (comme NVDA ou VoiceOver) pour vérifier que le focus suit le défilement.
  • Vérifiez la compatibilité: Si vous utilisez CSS scroll-behavior, testez sur des navigateurs plus anciens et envisagez un polyfill si nécessaire.
  • Optimisez la performance: Évitez les animations trop longues (gardez duration sous 1000ms pour ne pas frustrer les utilisateurs).
  • Personnalisez l’offset: Si votre site a un en-tête fixe, ajustez l’offset pour que le contenu cible ne soit pas masqué.

En combinant ces techniques, vous pouvez créer une expérience utilisateur fluide, accessible et professionnelle. Alors, quelle sera votre prochaine étape? Peut-être tester une de ces solutions sur votre projet actuel? Votre site et vos utilisateurs vous en remercieront!

À propos de l'auteur

Louis-Philippe est un spécialiste du marketing numérique. Fondateur du Hub Marketing et de l'agence Effet Cumulatif, il aime développer des projets de toutes sortes et aider ses clients à atteindre... Lire la suite

Rejoignez 5000 leaders marketing

Obtenez les dernières nouvelles, ressources et outils marketing.

Outils vedettes du mois

CastMagic – Plateforme propulsée par l’IA qui transcrit, édite et réutilise le contenu de podcasts en articles écrits, vidéos et publications pour les réseaux sociaux.

Browse AI
Browse AI – Plateforme d’extraction de données et de web scraping basée sur l’IA pour automatiser la collecte de données à partir de sites web.
Apollo.io – Plateforme d’intelligence commerciale qui fournit des données sur les prospects, les entreprises et les contacts, aidant les équipes dans la prospection, la prise de contact et l’engagement.

Manychat – Plateforme pour créer et automatiser des chatbots sur des applications de messagerie comme Facebook, SMS et courriel.

Leadpages – Plateforme de création de pages d’atterrissage conçue pour aider les entreprises à capter des prospects, augmenter les conversions et générer plus de ventes grâce à des pages optimisées.
À propos de l'auteur
Louis-Philippe est un spécialiste du marketing numérique. Fondateur du Hub Marketing et de l’agence Effet Cumulatif, il aime développer des projets de toutes sortes et aider ses clients à atteindre de nouveaux sommets.