Cuộn xuống dưới cùng của Div khi tải trang (jQuery)


238

Tôi có một div trên trang của mình:

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

Làm thế nào tôi có thể làm cho cuộn div xuống dưới cùng của div ?? Không phải trang, chỉ là DIV.

Câu trả lời:


610

Các giải pháp khác ở đây không thực sự hiệu quả với các div có nhiều nội dung - nó "tối đa hóa" cuộn xuống chiều cao của div (thay vì chiều cao của nội dung của div). Vì vậy, chúng sẽ hoạt động, trừ khi bạn có nhiều hơn gấp đôi chiều cao của div trong nội dung của nó.

Đây là phiên bản chính xác:

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

hoặc phiên bản jQuery 1.6+:

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

Hoặc hoạt hình:

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

5
Điều này cũng hoạt động: $ ('# div1'). ScrollTop ($ ('# div1'). Attr ("scrollHeight"));
Mike Todd

2
Làm thế nào để làm cho công việc này mà không đặt chiều cao tuyệt đối (tính bằng px) thành div1?
znat

Làm tốt! Tôi đang tìm một đoạn để cuộn và tất cả những gì tôi có thể tìm thấy là cuộn trang (html, body). Đây là một giải pháp tuyệt vời và sử dụng scrollHeight là một cách tuyệt vời để đảm bảo rằng nó luôn luôn chạm đáy.
Kevin Marmet

thật tuyệt vời, cái thứ hai nó hoạt động như vậy:d = $('#div1'); $(d).scrollTop( $(d).prop("scrollHeight") );
loretoparisi

56

Tất cả các câu trả lời mà tôi có thể thấy ở đây, bao gồm cả câu trả lời hiện được "chấp nhận", thực sự sai ở chỗ chúng đặt:

scrollTop = scrollHeight

Trong khi đó cách tiếp cận đúng là đặt:

scrollTop = scrollHeight - clientHeight

Nói cách khác:

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

Hoặc hoạt hình:

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

Tôi có một div với chiều cao được đặt và tràn được đặt thành tự động. Các câu trả lời hoạt hình đã hoạt động nhưng đây là giải pháp phi hoạt hình duy nhất thực sự sẽ cuộn xuống cuối "nội dung", chứ không phải chiều cao đã đặt của div. Bravo!
Darkloki

23

CẬP NHẬT: xem giải pháp của Mike Todd để có câu trả lời đầy đủ.


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

nếu bạn muốn nó hoạt hình (hơn 1000 mili giây).

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

nếu bạn muốn nó ngay lập tức.


8
Sai lầm! .height () được giới hạn trong khu vực được hiển thị, .prop ("scrollHeight") là chiều cao thực của div.
Con trỏ Null

5
Chắc chắn rồi! Đó là lý do tại sao câu trả lời của Mike Todd là câu trả lời được chấp nhận, không phải của tôi.
Alexis Pigeon

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

Cái này lấy chiều cao của trang và cuộn nó xuống khi cửa sổ đã được tải. Thay đổi 1000thành bất cứ điều gì bạn cần để làm nhanh hơn / chậm hơn một khi trang đã sẵn sàng.


Điều này cuộn toàn bộ trang phải không? Tôi chỉ muốn div cuộn xuống dưới cùng của div.
DobotJr

2
chạm vào. cùng logic, bộ chọn khác nhau.
âm


5

Cửa sổ cuộn xuống dưới cùng của div đích.

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

Sau đây sẽ làm việc. Xin lưu ý [0]scrollHeight

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

5

cho animate trong jquery (phiên bản> 2.0)

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

4

Không ai trong số này hoạt động với tôi, tôi có một hệ thống tin nhắn bên trong một ứng dụng web tương tự như trình nhắn tin của Facebook và muốn các tin nhắn xuất hiện ở cuối div.

Điều này làm việc một điều trị, Javascript cơ bản.

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

1
Có lẽ bạn chưa cài đặt jQuery. Bạn đang làm việc với dom gốc, họ đang sử dụng jQuery. jquery.com
csga5000

Giải pháp rất gọn gàng và thanh lịch.
Divyanshu Das

2

Tôi đang làm việc trong một cơ sở mã di sản đang cố gắng di chuyển đến Vue.

Trong tình huống cụ thể của tôi (div có thể cuộn được theo kiểu bootstrap), v-if hiển thị nội dung mới, mà tôi muốn trang cuộn xuống. Để làm cho hành vi này hoạt động, tôi phải đợi vue hoàn thành kết xuất lại, và sau đó sử dụng jQuery để cuộn xuống dưới cùng của phương thức.

Vì thế...

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

0

Bạn có thể sử dụng mã bên dưới để cuộn xuống dưới cùng của div khi tải trang.

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

0

Bạn có thể kiểm tra scrollHeight và clientHeight bằng scrollTop để cuộn xuống dưới cùng của mã div bên dưới.

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


luôn luôn kiểm tra mã của bạn trước khi cung cấp các giải pháp.
Lakshmi

-2

Khi trang được tải thì cuộn là giá trị tối đa.

Đây là hộp thông báo khi người dùng gửi tin nhắn sau đó luôn hiển thị cuộc trò chuyện mới nhất xuống để giá trị cuộn luôn luôn là maxium.

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

xem hình ảnh

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.