Scrollen Sie beim Laden der Seite zum Ende von Div (jQuery)

238

Ich habe ein Div auf meiner Seite:

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

Wie kann ich das Div zum Ende des Div scrollen lassen? Nicht die Seite, nur der DIV.

DobotJr
quelle

Antworten:

610

Die anderen Lösungen hier funktionieren nicht für Divs mit viel Inhalt - sie "maximal" scrollen bis zur Höhe des Div (anstelle der Höhe des Inhalts des Div). Sie funktionieren also, es sei denn, Sie haben mehr als die doppelte Höhe des Inhalts des Divs darin.

Hier ist die richtige Version:

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

oder jQuery 1.6+ Version:

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

Oder animiert:

$("#div1").animate({ scrollTop: $('#div1').prop("scrollHeight")}, 1000);
Mike Todd
quelle
5
Dies funktioniert auch: $ ('# div1'). ScrollTop ($ ('# div1'). Attr ("scrollHeight"));
Mike Todd
2
Wie funktioniert dies, ohne eine absolute Höhe (in px) auf einzustellen div1?
Znat
Gut gemacht! Ich suchte nach einem Snippet zum Scrollen und alles, was ich finden konnte, um Seiten zu scrollen (HTML, Body). Dies ist eine großartige Lösung und die Verwendung von scrollHeight ist eine großartige Möglichkeit, um sicherzustellen, dass es immer den Boden erreicht.
Kevin Marmet
erstaunlich, das zweite funktioniert so:d = $('#div1'); $(d).scrollTop( $(d).prop("scrollHeight") );
loretoparisi
56

Alle Antworten, die ich hier sehen kann, einschließlich der derzeit "akzeptierten", sind tatsächlich falsch, da sie Folgendes festlegen:

scrollTop = scrollHeight

Der richtige Ansatz besteht darin, Folgendes festzulegen:

scrollTop = scrollHeight - clientHeight

Mit anderen Worten:

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

Oder animiert:

$("#div1").animate({
  scrollTop: $('#div1')[0].scrollHeight - $('#div1')[0].clientHeight
}, 1000);
Patspam
quelle
Ich habe ein Div mit einer eingestellten Höhe und einem Überlauf, der auf Auto eingestellt ist. Die animierten Antworten funktionierten, aber dies ist die einzige nicht animierte Lösung, die tatsächlich zum Ende des "Inhalts" scrollen würde, nicht zur festgelegten Höhe des Div. Bravo!
Darkloki
23

UPDATE: Eine vollständige Antwort finden Sie in der Lösung von Mike Todd .


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

wenn Sie möchten, dass es animiert wird (über 1000 Millisekunden).

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

wenn du es sofort willst.

Alexis Taube
quelle
8
Falsch! .height () ist auf den angezeigten Bereich beschränkt, .prop ("scrollHeight") ist die tatsächliche Höhe von div.
Zeiger Null
5
Absolut! Deshalb ist die Antwort von Mike Todd die akzeptierte, nicht meine.
Alexis Pigeon
15
$(window).load(function() {
  $("html, body").animate({ scrollTop: $(document).height() }, 1000);
});

Dadurch wird die Höhe der Seite erfasst und nach dem Laden des Fensters nach unten gescrollt. Ändern Sie das 1000, was Sie brauchen, um es schneller / langsamer zu machen, sobald die Seite fertig ist.

Akkorde
quelle
Dies scrollt die ganze Seite richtig? Ich möchte nur, dass das Div zum Ende des Divs rollt.
DobotJr
2
touche. gleiche Logik, unterschiedlicher Selektor.
Akkorde
7

Versuche dies:

$('#div1').scrollTop( $('#div1').height() )
nicht definiert
quelle
5

Scrollen Sie zum unteren Rand des Zieldiv.

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');
zucken
quelle
5

Folgendes wird funktionieren. Bitte beachten Sie [0]undscrollHeight

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

zum animieren in jquery (version> 2.0)

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

Keines davon hat bei mir funktioniert. Ich habe ein Nachrichtensystem in einer Web-App, das dem Facebook-Messenger ähnelt, und wollte, dass die Nachrichten am unteren Rand eines Divs angezeigt werden.

Dies war ein Vergnügen, einfaches Javascript.

window.onload=function () {
     var objDiv = document.getElementById("MyDivElement");
     objDiv.scrollTop = objDiv.scrollHeight;
}
James Blachford
quelle
1
Sie haben jQuery wahrscheinlich nicht installiert. Sie arbeiten mit nativem Dom, sie verwenden jQuery. jquery.com
csga5000
Sehr ordentliche und elegante Lösung.
Divyanshu Das
2

Ich arbeite in einer alten Codebasis und versuche, nach Vue zu migrieren.

In meiner speziellen Situation (scrollbares Div in einem Bootstrap-Modal) zeigte ein v-if neuen Inhalt an, zu dem die Seite nach unten scrollen sollte. Damit dieses Verhalten funktioniert, musste ich warten, bis vue das erneute Rendern abgeschlossen hatte, und dann mit jQuery zum Ende des Modals scrollen.

So...

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

Sie können den folgenden Code verwenden, um beim Laden der Seite zum Ende von div zu scrollen.

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

Sie können scrollHeight und clientHeight mit scrollTop überprüfen, um zum unteren Rand des div-Codes zu scrollen.

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

Nghi
quelle
Bitte testen Sie immer Ihren Code, bevor Sie die Lösungen bereitstellen.
Lakshmi
-2

Wenn die Seite geladen ist, ist der Bildlauf der Maximalwert.

Dies ist das Meldungsfeld, wenn der Benutzer eine Nachricht sendet und dann immer den neuesten Chat nach unten anzeigt, sodass der Bildlaufwert immer maximal ist.

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

siehe Bild

Chandan Singh
quelle