Also available in: English
Il n’y a pas si longtemps j’ai vu un des développeurs avec lesquels je travaille écrire une fonction très complexe pour permettre un défilement fluide vers un élément plus bas dans la page. J’ai été assez surpris qu’il n’utilise pas scrollIntoView()
et son paramètre behavior
de valeur smooth
. Ça vous parle ?
Quand on a l’habitude de faire d’une certaine manière, difficile de se remettre en question notamment lorsque les projets sont un peu tendus en terme de timing. Souvent, même, en tant que développeurs, vous avez tendance à vous créer un petit fichier d’utilities ou de helpers pour éviter d’avoir à réécrire les petites fonctions utiles que vous avez l’habitude de réutiliser.
J’avais moi-même écrit une petit fonction il y a un moment en utilisant jQuery (eh oui ça date :p).
Smoothscroll en jQuery.
Smooth-scroll au clic avec scrollIntoView()
Imaginez une ancre interne dans une page, lorsque l’utilisateur clic sur le lien vous souhaitez proposer un défilement fluide jusqu’au début de cet élément (ici la cible est #part-3
). C’est possible rapidement avec ce petit bout de code JavaScript.
Comme vous pouvez le voir, rien de bien sorcier. Les paramètres sont les suivants, ils sont tous optionnels :
block
: quelle partie du bloc vous souhaitez atteindre parmistart
,center
,end
ounearest
(par défaultstart
).behavior
: comment rejoindre ce bloc, parmi les optionsauto
ousmooth
, (par défautauto
).inline
: où rejoindre l’élément si c’est un scroll horizontal, parmistart
,center
,end
ounearest
(par défaultnearest
)
Une petite démonstration sur CodePen pour illustrer mon propos.
Voir la démo sur CodePen
SmoothScroll à l’ajout d’un élément dans la page
Un des cas d’usage qui se présente assez régulièrement, c’est le cas d’un ajout de section dans une page après une action de l’utilisateur, ou d’un nouvel élément dans une liste par exemple. C’est une bonne manière de permettre à l’utilisateur de mieux comprendre ce qu’il vient de se passer à l’écran en le guidant vers l’élément qu’il a lui même demandé d’ajouter.
Voici une démo de Todo List utilisant localStorage pour enregistrer votre liste et scrollIntoView() pour vous mener aux nouveaux item créés.
J’avais commencé une démo sur CodePen mais ce dernier est buggé lorsqu’il s’agit de récupérer des données localStorage
. Mais vous pouvez toujours l’utiliser et le forker.
Voir la démo sur CodePen
Un coup d’oeil sur le support :
Allons plus loin ?
CSS utilise le même principe pour modifier le comportement de scroll dans un élément défilable. Apprenez-en plus grâce à cet article : CSS Smooth-Scrolling avec Scroll-Behavior.
N’hésitez pas si vous avez des cas d’usage à présenter, les commentaires sont ouverts pour ça. 🙂
Salut Geoffrey et merci pour cette astuce. J’étais parti pour remplacer mon vieux code jQuery par ça lorsque j’ai lu sur MDN que scrollIntoViewOptions était une API expérimentale et qu’elle ne devait pas être utilisée en prod.
En effet, ça n’est pas supporté par plusieurs navigateurs : https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView#Browser_compatibility
Du coup je pense que mon code à base de jQuery a encore un peu de répit ?
Hello,
c’est une question de point de vue.
Tant pis pour ceux qui ne supportent pas le smoothscroll, au pire ils auront un saut.
Entre ça et charger jQuery dans mon projet, j’ai déjà pris ma décision 🙂