Faites défiler vers le bas de Div lors du chargement de la page (jQuery)

238

J'ai une div sur ma page:

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

Comment puis-je faire défiler le div vers le bas du div ?? Pas la page, juste la DIV.

DobotJr
la source

Réponses:

610

Les autres solutions ici ne fonctionnent pas réellement pour les divs avec beaucoup de contenu - elles "maximisent" en défilant jusqu'à la hauteur du div (au lieu de la hauteur du contenu du div). Ils fonctionneront donc, sauf si vous avez plus du double de la hauteur de la div en contenu.

Voici la bonne version:

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

ou version jQuery 1.6+:

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

Ou animé:

$("#div1").animate({ scrollTop: $('#div1').prop("scrollHeight")}, 1000);
Mike Todd
la source
5
Cela fonctionne également: $ ('# div1'). ScrollTop ($ ('# div1'). Attr ("scrollHeight"));
Mike Todd
2
Comment faire fonctionner cela sans définir une hauteur absolue (en px) div1?
znat
Bien joué! Je cherchais un extrait pour faire défiler et tout ce que je pouvais trouver le défilement de la page (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.
Kevin Marmet du
incroyable, le deuxième ça fonctionne comme ça:d = $('#div1'); $(d).scrollTop( $(d).prop("scrollHeight") );
loretoparisi
56

Toutes les réponses que je peux voir ici, y compris celle actuellement "acceptée", sont en fait erronées dans la mesure où elles définissent:

scrollTop = scrollHeight

Alors que la bonne approche consiste à définir:

scrollTop = scrollHeight - clientHeight

En d'autres termes:

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

Ou animé:

$("#div1").animate({
  scrollTop: $('#div1')[0].scrollHeight - $('#div1')[0].clientHeight
}, 1000);
patspam
la source
J'ai un div avec une hauteur et un débordement définis sur auto. Les réponses animées ont fonctionné mais c'est la seule solution non animée qui défilerait réellement vers le bas du "contenu", pas la hauteur définie du div. Bravo!
Darkloki
23

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


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

si vous souhaitez l'animer (plus de 1000 millisecondes).

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

si vous le voulez instantané.

Alexis Pigeon
la source
8
Faux! .height () est limité à la zone affichée, .prop ("scrollHeight") est la hauteur réelle de div.
Pointer Null
5
Absolument! C'est pourquoi la réponse de Mike Todd est la réponse acceptée, pas la mienne.
Alexis Pigeon
15
$(window).load(function() {
  $("html, body").animate({ scrollTop: $(document).height() }, 1000);
});

Cela saisit la hauteur de la page et la fait défiler vers le bas une fois la fenêtre chargée. Remplacez le 1000par tout ce dont vous avez besoin pour le faire plus rapidement / plus lentement une fois que la page est prête.

Accords
la source
Cela fait défiler la page entière à droite? Je veux juste que le div défile jusqu'au bas du div.
DobotJr
2
touche. même logique, sélecteur différent.
Accords
7

essaye ça:

$('#div1').scrollTop( $('#div1').height() )
indéfini
la source
5

Faites défiler la fenêtre vers le 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');
jenking
la source
5

Ce qui suit fonctionnera. Veuillez noter [0]etscrollHeight

$("#myDiv").animate({ scrollTop: $("#myDiv")[0].scrollHeight }, 1000);
Lal Kokkat
la source
5

pour animer en jquery (version> 2.0)

var d = $('#div1');
d.animate({ scrollTop: d.prop('scrollHeight') }, 1000);
dpineda
la source
4

Rien de tout cela ne fonctionnait pour moi, j'ai un système de messagerie dans une application Web similaire à Facebook Messenger et je voulais que les messages apparaissent au bas d'une div.

Cela a fonctionné un régal, Javascript de base.

window.onload=function () {
     var objDiv = document.getElementById("MyDivElement");
     objDiv.scrollTop = objDiv.scrollHeight;
}
James Blachford
la source
1
Vous n'avez probablement pas installé jQuery. Vous travaillez avec un dom natif, ils utilisent jQuery. jquery.com
csga5000
Solution très soignée et élégante.
Divyanshu Das
2

Je travaille dans une base de code héritée essayant de migrer vers Vue.

Dans ma situation spécifique (div scrollable enveloppé dans un modal bootstrap), un v-if montrait du nouveau contenu, que je voulais faire défiler vers le bas. Pour que ce comportement fonctionne, j'ai dû attendre que vue termine le re-rendu, puis utiliser jQuery pour faire défiler vers le bas du modal.

Alors...

this.$nextTick(function() {
    $('#thing')[0].scrollTop = $('#thing')[0].scrollHeight;
})
Mavrick Laakso
la source
0

Vous pouvez utiliser le code ci-dessous pour faire défiler vers le bas de div lors du chargement de la page.

$(document).ready(function(){
  $('div').scrollTop($('div').scrollHeight);
});
Manish Nagdewani
la source
0

Vous pouvez vérifier scrollHeight et clientHeight avec scrollTop pour faire défiler vers le bas du code de type div ci-dessous.

$('#div').scroll(function (event) {
  if ((parseInt($('#div')[0].scrollHeight) - parseInt(this.clientHeight)) == parseInt($('#div').scrollTop())) 
  {
    console.log("this is scroll bottom of div");
  }
  
});

Nghi
la source
veuillez toujours tester votre code avant de fournir les solutions.
Lakshmi
-2

Lorsque la page est chargée, le défilement est la valeur maximale.

Il s'agit de la boîte de message lorsque l'utilisateur envoie un message, puis affiche toujours la dernière conversation en bas afin que la valeur de défilement soit toujours maximale.

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

voir l'image

chandan singh
la source