Sayfa yüklendiğinde Div'in en altına gidin (jQuery)


238

Sayfamda bir div var:

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

Div'in alt kısmına nasıl div kaydırma yapabilirim? Sayfa değil, sadece DIV.

Yanıtlar:


610

Buradaki diğer çözümler aslında çok fazla içeriğe sahip div'ler için işe yaramıyor - div'ın yüksekliğine (div içeriğinin yüksekliği yerine) aşağı doğru "maksimum çıkıyor" . Div'in içindeki içeriğin iki katından fazla olmadığı sürece çalışırlar.

İşte doğru sürüm:

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

veya jQuery 1.6+ sürümü:

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

Veya animasyonlu:

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

5
Bu da çalışır: $ ('# div1'). ScrollTop ($ ('# div1'). Attr ("scrollHeight"));
Mike Todd

2
Mutlak yükseklik (piksel cinsinden) olarak ayarlanmadan bu işlem nasıl yapılır div1?
znat

Aferin! Ben kaydırmak için bir snippet arıyordum ve tüm bu sayfa kaydırma (html, vücut) bulabilirsiniz. Bu harika bir çözüm ve scrollHeight kullanmak her zaman en alt seviyeye ulaştığından emin olmanın harika bir yoludur.
Kevin Marmet

şaşırtıcı, ikincisi şöyle çalışır:d = $('#div1'); $(d).scrollTop( $(d).prop("scrollHeight") );
loretoparisi

56

Şu anda "kabul edilen" olanlar da dahil olmak üzere burada görebildiğim tüm cevaplar, ayarladıkları için aslında yanlış:

scrollTop = scrollHeight

Oysa doğru yaklaşım şu şekildedir:

scrollTop = scrollHeight - clientHeight

Diğer bir deyişle:

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

Veya animasyonlu:

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

Yüksekliği ve taşması otomatik olarak ayarlanmış bir div var. Animasyonlu cevaplar işe yaradı, ancak bu, div'ın ayarlanan yüksekliğini değil, "içeriğin" en altına inen tek animasyonlu olmayan çözümdür. Bravo!
Darkloki

23

GÜNCELLEME: Eksiksiz bir cevap için Mike Todd'un çözümüne bakın.


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

animasyonlu olmasını istiyorsanız (1000 milisaniyeden fazla).

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

eğer anlık istiyorsanız.


8
Yanlış! .height () görüntülenen alanla sınırlıdır, .prop ("scrollHeight") div değerinin gerçek yüksekliğidir.
Pointer Null

5
Kesinlikle! Bu yüzden Mike Todd'un cevabı benim değil, kabul edilen cevaptır .
Alexis Pigeon

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

Bu, sayfanın yüksekliğini tutar ve pencere yüklendikten sonra sayfayı aşağı kaydırır. 1000Sayfa hazır olduğunda daha hızlı / daha yavaş yapmak için gerekeni değiştirin .


Bu, tüm sayfayı sağa kaydırıyor mu? Ben sadece div'in div'in altına inmesini istiyorum.
DobotJr

2
tuşe. aynı mantık, farklı seçici.
Akorlar


5

Pencereyi hedef div'in altına kaydırın.

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

Aşağıdakiler işe yarayacaktır. Lütfen dikkat [0]vescrollHeight

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

5

jquery'de animasyon için (sürüm> 2.0)

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

4

Bunların hiçbiri benim için işe yaramadı, bir web uygulamasının içinde Facebook messenger'a benzer bir mesaj sistemim var ve mesajların bir div'in altında görünmesini istiyordum.

Bu bir tedavi, temel Javascript çalıştı.

window.onload=function () {
     var objDiv = document.getElementById("MyDivElement");
     objDiv.scrollTop = objDiv.scrollHeight;
}

1
Muhtemelen yüklü jQuery yok. Yerli dom ile çalışıyorsunuz, jQuery kullanıyorlar. jquery.com
csga5000

Çok temiz ve zarif bir çözüm.
Divyanshu Das

2

Vue'ya geçmeye çalışan eski bir kod tabanında çalışıyorum.

Özel durumumda (bir bootstrap modalında kaydırılan kaydırılabilir div), v-if yeni içerik gösterdi, sayfanın aşağı kaydırmasını istedim. Bu davranışın çalışmasını sağlamak için, vue'nun yeniden oluşturma işlemini bitirmesini beklemek zorunda kaldım ve daha sonra modalın altına kaydırmak için jQuery kullanmalıydım.

Yani...

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

0

Sayfa yüklemesinde div'in altına gitmek için aşağıdaki kodu kullanabilirsiniz.

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

0

Aşağıdaki div benzeri kodun en altına gitmek için scrollHeight ve clientHeight'ı scrollTop ile kontrol edebilirsiniz.

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


Lütfen çözümleri sağlamadan önce kodunuzu test edin.
Lakshmi

-2

Sayfa yüklendiğinde kaydırma maksimum değerdir.

Bu, kullanıcı mesaj gönderdiğinde ve kaydırma değerinin her zaman maksimum olması için en son sohbeti her zaman aşağıda gösterdiği mesaj kutusudur.

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

resme bak

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.