J'ai donc utilisé ScrollIntoView() pour sauter aux ancres dans un composant de réaction dans le cadre d'une application web. Pour les petites pages, cela fonctionne bien, va au bon endroit et se comporte comme on pourrait s'y attendre. J'ai une page plus grande où le comportement est étrange. Au chargement, le saut à l'ancre est en dessous où il devrait être d'une demi-page ou plus. La première fois que l'on clique sur un lien vers une ancre, y compris la même ancre, l'ancre finit au-dessus où elle devrait être d'un montant similaire. Chaque clic suivant après cela fonctionne parfaitement tant que la page n'est pas rechargée. Voici mon code pour la fonction. Il a un setTimeout parce que je pensais que le problème avait quelque chose à voir avec le chargement de la page, mais il n'y a aucun effet. Voici ma fonction:Comment obtenir un comportement ScrollIntoView cohérent
scrollToAnchor: function() {
let anchorName = this.props.location.hash || window.location.hash;
if (anchorName) {
anchorName = anchorName.replace("#", "");
let anchorElement = document.getElementById(anchorName);
if (anchorElement) {
window.setTimeout(anchorElement.scrollIntoView(true), 0);
}
} else {
window.scrollTo(0, 0);
}
},
Est-ce que cela se produit dans tous les navigateurs? Avez-vous vérifié la chronologie des repeints? – enjoylife
J'ai testé dans Chrome et Firefox et le problème existe dans les deux. En ce qui concerne la chronologie, la première peinture sur rechargement est l'endroit où elle affiche d'abord l'ancre trop haut. Au premier clic, l'ancre s'aligne au bon endroit, puis repeint à un endroit différent. – suntruth
J'ai le même problème sur la dernière version de chrome sur mon Mac (pas sur Windows), et un problème encore plus étrange sur Edge. Des solutions de contournement? –