263 votes

Défilement vers le bas du Div au chargement de la page (jQuery)

J'ai un div sur ma page :

<div id='div1' style='overflow:scroll;overflow-x:hidden;max-height:200px;'></div>

Comment faire en sorte que la div défile jusqu'au bas de la div ? Pas la page, juste la division.

693voto

Mike Todd Points 1730

Les autres solutions proposées ici ne fonctionnent pas vraiment pour les divs avec beaucoup de contenu -- le défilement est "plafonné" à la hauteur de la div (au lieu de la hauteur de l'image). contenu de la div). Ils fonctionneront donc, à moins que le contenu de la div ne fasse plus du double de sa hauteur.

Voici la version correcte :

$('#div1').scrollTop($('#div1')[0].scrollHeight);

ou la version 1.6+ de jQuery :

var d = $('#div1');
d.scrollTop(d.prop("scrollHeight"));

Ou animée :

$("#div1").animate({ scrollTop: $('#div1').prop("scrollHeight")}, 1000);

7 votes

Cela fonctionne également : $('#div1').scrollTop($('#div1').attr("scrollHeight")) ;

2 votes

Comment faire pour que cela fonctionne sans fixer une hauteur absolue (en px) à div1 ?

1 votes

Bien joué ! Je cherchais un snippet pour faire défiler et tout ce que je trouvais c'était le défilement des pages (html, body). C'est une excellente solution et l'utilisation de scrollHeight est un excellent moyen de s'assurer qu'il atteint toujours le bas.

73voto

patspam Points 231

Toutes les réponses que je peux voir ici, y compris celle qui est actuellement "acceptée", sont en fait erronées en ce qu'elles fixent :

scrollTop = scrollHeight

Alors que l'approche correcte est de fixer :

scrollTop = scrollHeight - clientHeight

En d'autres termes :

$('#div1').scrollTop($('#div1')[0].scrollHeight - $('#div1')[0].clientHeight);

Ou animée :

$("#div1").animate({
  scrollTop: $('#div1')[0].scrollHeight - $('#div1')[0].clientHeight
}, 1000);

0 votes

J'ai un div avec une hauteur définie et un overflow défini sur auto. Les réponses animées ont fonctionné, mais c'est la seule solution non animée qui permet de faire défiler le texte jusqu'au bas du "contenu", et non jusqu'à la hauteur définie de la division. Bravo !

26voto

Alexis Pigeon Points 4047

MISE À JOUR : voir La solution de Mike Todd pour une réponse complète.


$("#div1").animate({ scrollTop: $('#div1').height()}, 1000);

si vous voulez qu'il soit animé (plus de 1000 millisecondes).

$('#div1').scrollTop($('#div1').height())

si vous voulez que ce soit instantané.

12 votes

Erreur ! .height() est limité à la zone affichée, .prop("scrollHeight") est la hauteur réelle de la division.

6 votes

Absolument ! C'est pourquoi Mike Todd réponse est celui qui est accepté, pas le mien.

15voto

Chords Points 2416
$(window).load(function() {
  $("html, body").animate({ scrollTop: $(document).height() }, 1000);
});

Cela permet de saisir la hauteur de la page et de la faire défiler vers le bas une fois la fenêtre chargée. Changez le 1000 à ce dont vous avez besoin pour le faire plus vite/plus lentement une fois que la page est prête.

0 votes

Cela fait défiler toute la page, n'est-ce pas ? Je veux juste que la div défile jusqu'au bas de la div.

2 votes

Touche. Même logique, sélecteur différent.

5voto

jenking Points 31

Faire défiler la fenêtre jusqu'au bas de la division cible.

function scrollToBottom(id){
  div_height = $("#"+id).height();
  div_offset = $("#"+id).offset().top;
  window_height = $(window).height();
  $('html,body').animate({
    scrollTop: div_offset-window_height+div_height
  },'slow');
}

scrollToBottom('call_div_id');

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