93 votes

Javascript scrollIntoView() alignement central ?

Javascript .scrollIntoView(boolean) ne fournit que deux options d'alignement.

  1. Haut
  2. bas

Que faire si je veux faire défiler la vue de telle sorte que. Je veux apporter un élément particulier quelque part au milieu de la page ?

113voto

Sri7 Points 1175

essaye ça :

  document.getElementById('myID').scrollIntoView({
            behavior: 'auto',
            block: 'center',
            inline: 'center'
        });

référez-vous ici pour plus d'informations et d'options : https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView

49voto

ThinkingStiff Points 19251

Utilisez window.scrollTo() pour cela. Obtenez le haut de l'élément vers lequel vous souhaitez vous déplacer et soustrayez la moitié de la hauteur de la fenêtre.

Démo : http://jsfiddle.net/ThinkingStiff/MJ69d/

 Element.prototype.documentOffsetTop = function () {
    return this.offsetTop + ( this.offsetParent ? this.offsetParent.documentOffsetTop() : 0 );
};

var top = document.getElementById( 'middle' ).documentOffsetTop() - ( window.innerHeight / 2 );
window.scrollTo( 0, top );

10voto

Gregory R. Points 735
document.getElementById("id").scrollIntoView({block: "center"});

8voto

fred727 Points 11

Vous pouvez le faire en deux étapes :

 myElement.scrollIntoView(true);
var viewportH = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
window.scrollBy(0, -viewportH/2); // Adjust scrolling with a negative value here

Vous pouvez ajouter la hauteur de l'élément si vous souhaitez le centrer globalement, et ne pas centrer son sommet :

 myElement.scrollIntoView(true);
var viewportH = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
window.scrollBy(0, (myElement.getBoundingClientRect().height-viewportH)/2);

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