180 votes

ScrollIntoView() provoque le déplacement de toute la page

J'utilise ScrollIntoView () pour faire défiler l'élément en surbrillance dans une liste. Lorsque je fais défiler vers le bas ScrollIntoView (false) fonctionne parfaitement. Mais quand je fais défiler vers le haut, ScrollIntoView (true) fait bouger un peu toute la page, ce qui, je pense, est prévu. Existe-t-il un moyen d'éviter le déplacement de toute la page lors de l'utilisation deScrollIntoView (true) ?

Voici la structure de ma page -

#listOfDivs {
  position:fixed;
  top:100px;
  width: 300px;
  height: 300px;
  overflow-y: scroll;
}

<div="container">
    <div="content"> 
         <div id="listOfDivs"> 
             <div id="item1"> </div>
             <div id="item2"> </div>
             <div id="itemn"> </div>
         </div>
    </div>
</div>

listOfDivs vient d'Ajax. Utilisation d'un safari mobile.

248voto

jfrohn Points 2481

Fixé avec :

element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' })

voir : https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView

19voto

dipole_moment Points 51
var el = document.querySelector("yourElement");
window.scroll({top: el.offsetTop, behavior: 'smooth'});

17voto

poepje Points 680

J'ai eu ce problème aussi, et j'ai passé de nombreuses heures à essayer de le gérer. J'espère que ma résolution pourra encore aider certaines personnes.

Ma solution a été :

  • Pour Chrome : changer .scrollIntoView() en .scrollIntoView({block: 'nearest'}) (grâce à @jfrohn).
  • Pour Firefox : appliquer overflow: -moz-hidden-unscrollable; sur l'élément conteneur qui se décale.
  • Non testé dans d'autres navigateurs.

12voto

Jesco Points 121

Jouez avec scrollIntoViewIfNeeded()... assurez-vous qu'il est pris en charge par le navigateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X