La manipulation de défilement de l'Animation à Réagir
Quel est le corriger façon de traiter avec la position de défilement de Réagir? J'aime vraiment le défilement régulier en raison d'une meilleure expérience utilisateur. Depuis la manipulation du DOM à Réagir est un anti-modèle que j'ai couru dans un problème: comment faire défiler en douceur à une position/d'élément? J'ai l'habitude de changer scrollTop valeur d'un élément, mais c'est une manipulation du DOM, qui n'est pas autorisé.
code:
import React from 'react';
import ReactDOM from 'react-dom';
class App extends React.Component {
handleClick = e => {
for (let i = 1; i <= 100; i++) {
setTimeout(() => (this.node.scrollTop = i), i * 2);
}
};
render() {
const someArrayToMap = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
return (
<div ref={node => this.node = node} style={{overflow: 'auto', height: '100vh'}}>
<button onClick={this.handleClick}>CLICK TO SCROLL</button>
{
[...someArrayToMap,
...someArrayToMap,
...someArrayToMap,
...someArrayToMap,
...someArrayToMap,
...someArrayToMap,
...someArrayToMap].map((e, i) => <div key={i}>some text here</div>)
}
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById('root'));
La façon d'atteindre cet objectif dans un Réagir?
Rappelez-vous que la manipulation du DOM est un anti-modèle, car Réagir est essentiellement un DOM gestionnaire, de sorte qu'il doit se tenir au courant de tout ce qui se passe dans les DOM; avec cela dit, vous pouvez toujours utiliser des choses comme
findDOMNode
et getBoundingClientRect
d'observer les nœuds DOM directement. Lecture seule est tout bon.OriginalL'auteur sympi | 2017-06-05
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement utiliser les références et les
scrollIntoView
méthode (avecbehavior: 'smooth'
pour un défilement fluide). C'est seulement quelques lignes de code et ne nécessite pas un paquet.Dire que c'est ce que vous voulez pour faire défiler jusqu'à
Et une sorte de bouton
à l'appel de la méthode de défilement
EDIT: Parce que cette méthode n'est pas encore supporté par tous les navigateurs (vue d'ensemble de la prise en charge du navigateur), vous pourriez vouloir utiliser un polyfill.
Mise en garde: prise en charge du navigateur pour l'option de défilement lisse sur
scrollIntoView
est limitée à Chrome et Firefox en novembre 2018C'est un Javascript méthode, de sorte qu'il ne dépend pas de Réagir. Ici vous pouvez voir la cahier des charges et de la prise en charge du navigateur. Parce qu'il n'est pas encore supporté par tous les navigateurs, vous pourriez vouloir utiliser des polyfills. J'ai utilisé ce polyfill qui a fonctionné parfaitement pour moi
Cela semble être la meilleure option, si vous incluez le polyfill. Lorsque tous les navigateurs de mettre en œuvre ce que vous pouvez simplement supprimer le polyfill et c'est tout. Merci pour cette solution, fonctionne très bien! @sympi vous devez accepter ce que la réponse correcte.
Votre lien vers le polyfill est pointant vers la page des spécifications.
OriginalL'auteur bbrinx
window.scroll({top: 0, left: 0, behavior: 'smooth' })
fonctionne pour moi.Vous devez également vérifier pour compatibilité du navigateur
Ou de l'utilisation polyfill
OriginalL'auteur transang
Un couple de bons paquets déjà qui peut gérer pour vous:
https://github.com/fisshy/react-scroll - Démo
https://www.npmjs.com/package/react-scroll-to-component
Simple, faites défiler jusqu'à la composante
Espérons que cette aide!
la démo est fisshy.github.io/react-scroll-example/basic/index.html fonctionne très bien pour moi
est la liste en haut à gauche est censé être cliquable pour le défilement ou est-il seulement un style basé sur la vision de position du port ?
Ouais menu du haut, cliquez sur est le défilement de la page pour m'en Chrome.
Bien dans FF, j'ai eu la console d'erreur:
ReferenceError: event is not defined
, jamais l'esprit, je vais regarder cela dans Chrome !OriginalL'auteur Chase DeAnda
Il y a plusieurs bibliothèques pour le défilement vers les points d'ancrage de Réagir. Un seul choix dépend des caractéristiques que vous recherchez et l'installation existante de votre page.
Réagir À Défilement D'Ancrage est un léger bibliothèque spécialement pour le défilement vers des ancres qui sont mappés à des URL les tables de hachage. Il met également à jour l'URL de hachage basée sur concentre actuellement la section. [Divulgation complète: je suis l'auteur de cette bibliothèque]
Réagir de Défilement, mentionné dans une autre réponse, est l'un des plus complet de la bibliothèque pour le défilement vers les points d'ancrage, sans aucune réflexion de l'emplacement dans l'URL.
Vous pouvez également brancher quelque chose comme Réagir Routeur De Hachage Lien De Défilement si vous utilisez déjà Réagir Routeur, qui sera alors également une cravate dans votre URL de hachage.
OriginalL'auteur gabergg
J'ai vraiment profiter de la réagir-routeur site web dans la rubrique API, ils semblent utiliser cette scrollToDoc composant ça, c'est très doux traduction d'un type de VanillaJS lisse de défilement de la fonction de Réagir qui dépend
réagissent-motion
!OriginalL'auteur PaulCo