Tutorial

Comment mettre en œuvre le défilement fluide dans React

Published on November 3, 2020
author

James Quick

Français
Comment mettre en œuvre le défilement fluide dans React

Introduction

On parle de défilement fluide lorsque, au lieu de cliquer sur un bouton et d’être instantanément dirigé vers une autre partie de la même page, l’utilisateur y est dirigé par une animation de défilement. C’est l’une de ces subtiles fonctionnalités de l’interface utilisateur sur un site qui fait une différence esthétique.

Dans cet article, vous allez utiliser le paquet react-scroll sur npm pour mettre en place un défilement fluide.

Conditions préalables

Vous aurez besoin des éléments suivants pour compléter ce tutoriel :

Ce tutoriel a été vérifié avec Node v13.14.0, npm v6.14.5, react v16.13.1, et react-scroll v.1.7.16.

Démarrage rapide : utiliser react-scroll

Vous allez créer une application simple dans ce tutoriel, mais si vous souhaitez avoir un aperçu rapide du fonctionnement de react-scroll, n’hésitez pas à vous référer à ces étapes condensées :

Installez react-scroll:

npm i -S react-scroll

Importez le paquet react-scroll :

import { Link, animateScroll as scroll } from "react-scroll";

Ajoutez le composant de lien. Le composant <Link /> pointera vers une certaine zone de votre application :

<Link to="section1">

Plongeons plus profondément et construisons une petite application React avec un défilement fluide.

Étape 1 - Installer et exécuter une application React

Pour plus de commodité, ce tutoriel utilisera un projet de démarrage React (en utilisant Create React App 2.0) qui comporte une barre de navigation (ou navbar) dans la partie supérieure, ainsi que cinq sections de contenu différentes.

Les liens dans la barre de navigation ne sont pour l’instant que des balises d’ancrage, mais vous les mettrez bientôt à jour pour permettre un défilement fluide.

Vous pouvez trouver le projet sous React with smooth scrolling. Veuillez noter que ce lien est pour la branche start. La branche master comprend toutes les modifications terminées.

Capture d'écran de GitHub Repo

Pour cloner le projet, vous pouvez utiliser la commande suivante :

git clone https://github.com/do-community/React-With-Smooth-Scrolling.git

Si vous vous intéressez au répertoire src/components vous trouverez un répertoire Navbar.js qui contient le fichier <Navbar> avec les nav-items correspondant à cinq <Section>s différentes.

src/Components/Navbar.js
import React, { Component } from "react";
import logo from "../logo.svg";

export default class Navbar extends Component {
  render() {
    return (
      <nav className="nav" id="navbar">
        <div className="nav-content">
          <img
            src={logo}
            className="nav-logo"
            alt="Logo."
            onClick={this.scrollToTop}
          />
          <ul className="nav-items">
            <li className="nav-item">Section 1</li>
            <li className="nav-item">Section 2</li>
            <li className="nav-item">Section 3</li>
            <li className="nav-item">Section 4</li>
            <li className="nav-item">Section 5</li>
          </ul>
        </div>
      </nav>
    );
  }
}

Ensuite, si vous ouvrez les App.js dans le répertoire src, vous verrez où se trouve le <Navbar> avec les cinq <Section>s"

src/Components/App.js
import React, { Component } from "react";
import logo from "./logo.svg";
import "./App.css";
import Navbar from "./Components/Navbar";
import Section from "./Components/Section";
import dummyText from "./DummyText";
class App extends Component {
  render() {
    return (
      <div className="App">
        <Navbar />
        <Section
          title="Section 1"
          subtitle={dummyText}
          dark={true}
          id="section1"
        />
        <Section
          title="Section 2"
          subtitle={dummyText}
          dark={false}
          id="section2"
        />
        <Section
          title="Section 3"
          subtitle={dummyText}
          dark={true}
          id="section3"
        />
        <Section
          title="Section 4"
          subtitle={dummyText}
          dark={false}
          id="section4"
        />
        <Section
          title="Section 5"
          subtitle={dummyText}
          dark={true}
          id="section5"
        />
      </div>
    );
  }
}

export default App;

Chaque <Section> prend en compte un titre et sous-titre.

Comme ce projet utilise du texte factice dans les différentes sections, pour réduire la répétition du code, ce texte a été ajouté à un fichier DummyText.js importé et transmis dans chaque composant <Section>.

Pour exécuter l’application, vous pouvez utiliser les commandes suivantes.

  1. cd React-With-Smooth-Scrolling
  2. npm install
  3. npm start

Cela lancera l’application en mode développement et la rafraîchira automatiquement lorsque vous enregistrerez vos fichiers. Vous pouvez le consulter dans le navigateur à l’adresse suivante localhost:3000.

Capture d'écran de l'application dans le navigateur

Étape 2 - Installer et configurer React-Scroll

Il est maintenant temps d’installer react-scroll et ajouter cette fonctionnalité. Vous pouvez trouver des informations pour le paquet sur npm.

react-scroll package on npm

Pour installer le paquet, exécutez la commande suivante :

  1. npm install react-scroll

Ensuite, ouvrez le fichier Navbar.js et ajoutez une importation pour deux importations nommées, Link et animateScroll.

src/Components/Navbar.js
import { Link, animateScroll as scroll } from "react-scroll";

Vous remarquerez que j’ai créé un alias animatedScroll à faire défiler pour faciliter l’utilisation.

Une fois toutes vos importations définies, vous pouvez maintenant mettre à jour vos articles de navigation pour utiliser le composant <Link>. Ce composant prend plusieurs propriétés. Vous pouvez tout lire sur elles sur la page de documentation.

Pour l’instant, il convient d’accorder une attention particulière à activeClass, to, spy, smooth, offset et duration.

  • activeClass - La classe appliquée lorsque l’élément est atteint.
  • a - La cible jusqu’où défiler.
  • spy - Pour que Link soit sélectionné lorsque scroll est à la position de sa cible.
  • smooth - Pour animer le défilement.
  • offset - Pour faire défiler des px supplémentaires (comme du padding).
  • duration - L’heure de l’animation de défilement Il peut s’agir d’un numéro ou d’une fonction.

La propriété to est la partie la plus importante car elle indique à la composante quel élément faire défiler. Dans ce cas, il s’agira de chacune de vos <Section>s.

Avec la propriété offset, vous pouvez définir une quantité supplémentaire de défilement à effectuer pour atteindre chaque <Section>.

Voici un exemple des propriétés que vous utiliserez pour chaque composant <Link>. La seule différence entre elles sera la propriété to, car elles pointent chacune vers une <Section> :

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

Vous devrez mettre à jour chacun des nav-items en conséquence. Avec ces ajouts, vous devriez pouvoir retourner à votre navigateur (votre application devrait déjà avoir redémarré automatiquement) et voir un défilement fluide en action.

Étape 3 - Styler des liens actifs

La propriété activeClass vous permet de définir une classe à appliquer au composant <Link> lorsque son to est actif. Un <Link> est considéré comme actif si son élément to est visible près du haut de la page. Cela peut être déclenché en cliquant sur le <Link> lui-même ou en faisant défiler l’écran jusqu’à la <Section> manuellement.

Pour le prouver, j’ai ouvert le Chrome DevTools et j’ai inspecté le cinquième <Link> comme indiqué ci-dessous. Quand j’ai cliqué sur ce <Link> ou fait défiler manuellement au bas de la page, j’ai remarqué que la classe active est, en fait, appliquée.

Vue du navigateur de l'app React

Pour en profiter, vous pouvez créer une classe active et ajouter un soulignement au lien. Vous pouvez ajouter ce morceau de CSS dans le fichier App.css dans le répertoire src :

src/App.css
.nav-item > .active {
    border-bottom: 1px solid #333;
}

Maintenant, si vous retournez à votre navigateur et faites défiler un peu, vous devriez voir que le <Link> approprié est souligné.

Mise à jour de la vue du navigateur de l'application React

Étape 4 - Ajouter des fonctions supplémentaires

Pour une dernière partie du contenu, ce paquet fournit également quelques fonctions qui peuvent être appelées directement comme scrollToTop, scrollToBottometc. ainsi que divers événements que vous pouvez gérer.

En référence à ces fonctions, le logo de l’application dans une barre de navigation amène généralement l’utilisateur à la page d’accueil ou au haut de la page en cours.

Pour illustrer simplement la façon d’appeler une de ces fonctions fournies, j’ai ajouté un gestionnaire de clics à la nav-logo, afin de faire défiler l’utilisateur vers le haut de la page, comme ça :

src/Components/Navbar.js
scrollToTop = () => {
    scroll.scrollToTop();
};

De retour dans le navigateur, vous devriez pouvoir faire défiler la page vers le bas, cliquer sur le logo dans la barre de navigation et être ramené au haut de la page.

Conclusion

Le défilement fluide est l’une des caractéristiques qui peut ajouter beaucoup de valeur esthétique à votre application. Le paquetreact-scroll vous permet de tirer parti de cette fonctionnalité sans frais généraux importants.

Dans ce tutoriel, vous avez ajouté un défilement fluide à une application et expérimenté différents paramètres. Si vous êtes curieux, passez un peu de temps à explorer les autres fonctions et événements que ce paquet vous propose.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the authors
Default avatar
James Quick

author

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Become a contributor for community

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

DigitalOcean Documentation

Full documentation for every DigitalOcean product.

Resources for startups and SMBs

The Wave has everything you need to know about building a business, from raising funding to marketing your product.

Get our newsletter

Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

New accounts only. By submitting your email you agree to our Privacy Policy

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.