Gulir ke bawah Div pada pemuatan halaman (jQuery)

238

Saya memiliki div di halaman saya:

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

Bagaimana saya bisa membuat gulir div ke bagian bawah div ?? Bukan halaman, hanya DIV.

DobotJr
sumber

Jawaban:

610

Solusi lain di sini tidak benar-benar bekerja untuk div dengan banyak konten - itu "maxes out" bergulir ke ketinggian div (bukan ketinggian konten div). Jadi mereka akan bekerja, kecuali jika Anda memiliki lebih dari dua kali lipat tinggi div dalam konten di dalamnya.

Ini versi yang benar:

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

atau versi jQuery 1.6+:

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

Atau animasi:

$("#div1").animate({ scrollTop: $('#div1').prop("scrollHeight")}, 1000);
Mike Todd
sumber
5
Ini juga berfungsi: $ ('# div1'). ScrollTop ($ ('# div1'). Attr ("scrollHeight"));
Mike Todd
2
Bagaimana membuat ini berfungsi tanpa mengatur ketinggian absolut (dalam px) div1?
znat
Sudah selesai dilakukan dengan baik! Saya sedang mencari cuplikan untuk digulir dan yang dapat saya temukan hanyalah pengguliran halaman (html, tubuh). Ini adalah solusi hebat dan menggunakan scrollHeight adalah cara yang bagus untuk memastikan selalu mencapai bagian bawah.
Kevin Marmet
luar biasa, yang kedua berfungsi seperti itu:d = $('#div1'); $(d).scrollTop( $(d).prop("scrollHeight") );
loretoparisi
56

Semua jawaban yang bisa saya lihat di sini, termasuk yang "diterima" saat ini, sebenarnya salah karena mereka menetapkan:

scrollTop = scrollHeight

Sedangkan pendekatan yang benar adalah mengatur:

scrollTop = scrollHeight - clientHeight

Dengan kata lain:

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

Atau animasi:

$("#div1").animate({
  scrollTop: $('#div1')[0].scrollHeight - $('#div1')[0].clientHeight
}, 1000);
tepuk
sumber
Saya memiliki div dengan ketinggian dan limpahan diatur ke otomatis. Jawaban animasi berhasil tetapi ini adalah satu-satunya solusi non-animasi yang benar-benar akan menggulir ke bagian bawah "konten", bukan set ketinggian div. Bravo!
Darkloki
23

PEMBARUAN: lihat solusi Mike Todd untuk jawaban yang lengkap.


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

jika Anda ingin dianimasikan (lebih dari 1000 milidetik).

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

jika Anda menginginkannya secara instan.

Alexis Pigeon
sumber
8
Salah! .height () terbatas pada area yang ditampilkan, .prop ("scrollHeight") adalah ketinggian sebenarnya dari div.
Pointer Null
5
Benar! Itu sebabnya jawaban Mike Todd adalah jawaban yang diterima, bukan jawaban saya.
Alexis Pigeon
15
$(window).load(function() {
  $("html, body").animate({ scrollTop: $(document).height() }, 1000);
});

Ini meraih ketinggian halaman dan menggulirnya ke bawah setelah jendela dimuat. Ubah 1000untuk apa pun yang Anda perlu lakukan lebih cepat / lebih lambat setelah halaman siap.

Akord
sumber
Ini menggulung seluruh halaman, kan? Saya hanya ingin div untuk menggulir ke bagian bawah div.
DobotJr
2
menyentuh. logika yang sama, pemilih yang berbeda.
Chords
7

coba ini:

$('#div1').scrollTop( $('#div1').height() )
tidak terdefinisi
sumber
5

Gulir jendela ke bagian bawah target div.

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
sumber
5

Berikut ini akan berfungsi. Mohon diperhatikan [0]danscrollHeight

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

untuk menghidupkan dalam jquery (versi> 2.0)

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

Tidak ada yang berfungsi untuk saya, saya memiliki sistem pesan di dalam aplikasi web yang mirip dengan Facebook messenger dan ingin pesan muncul di bagian bawah div.

Ini berhasil memperlakukan, Javascript dasar.

window.onload=function () {
     var objDiv = document.getElementById("MyDivElement");
     objDiv.scrollTop = objDiv.scrollHeight;
}
James Blachford
sumber
1
Anda mungkin belum menginstal jQuery. Anda bekerja dengan dom asli, mereka menggunakan jQuery. jquery.com
csga5000
Solusi yang sangat rapi dan elegan.
Divyanshu Das
2

Saya sedang bekerja di basis kode warisan yang mencoba bermigrasi ke Vue.

Dalam situasi spesifik saya (div yang dapat digulir yang dibungkus dengan bootstrap modal), v-if menunjukkan konten baru, yang saya ingin halaman gulir ke bawah. Agar perilaku ini berfungsi, saya harus menunggu vue selesai merender ulang, dan kemudian menggunakan jQuery untuk menggulir ke bagian bawah modal.

Begitu...

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

Anda dapat menggunakan kode di bawah ini untuk menggulir ke bawah div pada memuat halaman.

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

Anda dapat memeriksa scrollHeight dan clientHeight dengan scrollTop untuk menggulir ke bagian bawah div seperti kode di bawah ini.

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

Nghi
sumber
selalu silakan uji kode Anda sebelum memberikan solusi.
Lakshmi
-2

Ketika halaman dimuat maka gulir adalah nilai maksimal.

Ini adalah kotak pesan ketika pengguna mengirim pesan maka selalu tampilkan obrolan terbaru di bawah sehingga nilai gulir selalu maksimal.

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

lihat gambar

chandan singh
sumber