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.

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);

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);

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.


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.


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


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');

5

Berikut ini akan berfungsi. Mohon diperhatikan [0]danscrollHeight

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

5

untuk menghidupkan dalam jquery (versi> 2.0)

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

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;
}

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;
})

0

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

$(document).ready(function(){
  $('div').scrollTop($('div').scrollHeight);
});

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");
  }
  
});


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.