Прокрутіть донизу Div на завантаженні сторінки (jQuery)


238

У мене на своїй сторінці є діва:

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

Як я можу зробити так, щоб дів прокрутився до низу діва ?? Не сторінка, а лише DIV.

Відповіді:


610

Інші рішення тут насправді не працюють для дів з великим вмістом - він "максимізує" прокручування вниз до висоти div (замість висоти вмісту div). Так вони працюватимуть, якщо у вас не буде більше ніж удвічі більше висоти діва за вмістом всередині нього.

Ось правильна версія:

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

або версія jQuery 1.6+:

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

Або анімовані:

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

5
Це також працює: $ ('# div1'). ScrollTop ($ ('# div1'). Attr ("scrollHeight"));
Майк Тодд

2
Як зробити цю роботу без встановлення абсолютної висоти (в px) div1?
знать

Молодці! Я шукав фрагмент для прокрутки, і все, що я міг знайти його прокрутку сторінки (html, body). Це чудове рішення, а використання scrollHeight - це чудовий спосіб переконатися, що він завжди досягає дна.
Кевін Мармет

дивовижно, другий він працює так:d = $('#div1'); $(d).scrollTop( $(d).prop("scrollHeight") );
loretoparisi

56

Усі відповіді, які я бачу тут, включаючи "прийнятий", насправді помиляються в тому, що вони встановлюють:

scrollTop = scrollHeight

Беручи до уваги правильний підхід:

scrollTop = scrollHeight - clientHeight

Іншими словами:

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

Або анімовані:

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

У мене є div з заданою висотою і переливом, встановленим для автоматичного. Анімовані відповіді спрацювали, але це єдине не анімоване рішення, яке насправді прокручуватиме до низу "вмісту", а не встановленої висоти діва. Браво!
Darkloki

23

ОНОВЛЕННЯ: див . Рішення Майка Тодда для повної відповіді.


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

якщо ви хочете, щоб його анімували (понад 1000 мілісекунд).

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

якщо ви хочете це миттєво.


8
Неправильно! .height () обмежена відображеною областю, .prop ("scrollHeight") - реальна висота діла.
Покажчик Нуль

5
Абсолютно! Ось чому Майк Тодд відповідь є визнаним один, а не моя.
Олексій Голуб

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

Це захоплює висоту сторінки та прокручує її вниз після завантаження вікна. Змініть 1000на те, що вам потрібно зробити це швидше / повільніше, коли сторінка готова.


Це прокручує всю сторінку правильно? Я просто хочу, щоб дів прокрутився до низу діва.
DobotJr

2
дотик. та ж логіка, інший селектор.
Акорди


5

Прокрутіть вікно до нижньої частини цільової групи.

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

Далі буде працювати. Зверніть увагу [0]іscrollHeight

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

5

для анімації в jquery (версія> 2.0)

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

4

Нічого з них не працювало для мене, у мене є система повідомлень всередині веб-програми, яка схожа на месенджер Facebook і хотіла, щоб повідомлення відображалися внизу розділу.

Це працювало частуванням, базовим Javascript.

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

1
Напевно, у вас не встановлено jQuery. Ви працюєте з рідним домом, вони використовують jQuery. jquery.com
csga5000

Дуже акуратне та елегантне рішення.
Divyanshu Das

2

Я працюю у застарілій кодовій базі, намагаючись перейти до Vue.

У моїй конкретній ситуації (прокручуваний div, загорнутий у модуль завантаження), v-if показав новий вміст, на який я хотів, щоб сторінка прокручувалася вниз. Для того, щоб ця поведінка спрацювала, мені довелося чекати, коли vue закінчить повторну рендерінг, а потім використовувати jQuery для прокрутки до нижньої частини модального.

Так...

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

0

Ви можете використовувати код нижче, щоб прокрутити сторінку донизу на дні завантаження.

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

0

Ви можете перевірити scrollHeight та clientHeight за допомогою scrollTop, щоб прокрутити донизу код, подібний нижче.

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


завжди будь-ласка, протестуйте свій код, перш ніж надавати рішення.
Лакшмі

-2

Коли сторінка завантажується, тоді прокрутка - це максимальне значення.

Це поле вікна, коли користувач надсилає повідомлення, а потім завжди показувати останній чат вниз, щоб значення прокрутки завжди було максимальним.

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

дивіться зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.