Dans une application de réaction, une méthode est appelée pour faire apparaître un nœud particulier comme suit.
scrollToQuestionNode(id) {
const element = document.getElementById(id);
element.scrollIntoView(false);
}
Le défilement se passe bien, mais l'action de défilement est un peu saccadée. Comment puis-je le rendre lisse? Je ne vois aucune option que je puisse donner à scrollIntoView pour la même chose.
Cela pourrait aider.
De la documentation MDN de scrollIntoView Vous pouvez passer option au lieu de booléen.
scrollIntoViewOptions Optional
A Boolean or an object with the following options:
{
behavior: "auto" | "instant" | "smooth",
block: "start" | "end",
}
Donc, vous pouvez simplement passer un paramètre comme celui-ci.
scrollToQuestionNode(id) {
const element = document.getElementById(id);
element.scrollIntoView({ block: 'end', behavior: 'smooth' });
}
Référence: https://developer.mozilla.org/en/docs/Web/API/Element/scrollIntoView
Pour le support multibrowser, utilisez le smoots scroll polyfill à partir d'ici:
https://github.com/iamdustan/smoothscroll
Pour une implémentation facile, utilisez un wrapper comme celui-ci autour du polyfill afin que la méthode .js polyfill soit initialisée après le chargement:
https://codepen.io/diyifang/embed/MmQyoQ?height=265&theme-id=0&default-tab=js,result&embed-version=2
Maintenant, cela devrait fonctionner avec plusieurs navigateurs:
document.querySelector('.foo').scrollIntoView({
behavior: 'smooth'
});