jQuery cuộn xuống cuối trang / iframe


224

Làm cách nào để sử dụng jquery để cuộn xuống dưới cùng của iframe hoặc trang?

Câu trả lời:


360

Nếu bạn muốn một cuộn hoạt hình chậm đẹp, đối với bất kỳ neo nào với href="#bottom"điều này sẽ cuộn bạn xuống phía dưới:

$("a[href='#bottom']").click(function() {
  $("html, body").animate({ scrollTop: $(document).height() }, "slow");
  return false;
});

Hãy thay đổi bộ chọn.


48
Điều này hoạt động trong Firefox 3.5.7 nhưng không có trong Chrome 4.0.295.0. Các hoạt động sau đây trong Chrome: $ ('html, body'). Animate ({scrollTop: $ (tài liệu) .height ()}, 'chậm');
Tom

1
@Tom, tôi không thể phát hiện ra sự khác biệt giữa giải pháp của bạn và Mark's!
Muhammad Gelbana

4
@MuhammadGelbana kiểm tra ngày chỉnh sửa. Có vẻ như Mark đã cập nhật câu trả lời của mình để bao gồm sửa lỗi của Tom.
Paul Parker

Thực sự không cần phải lấy chiều cao của phần tử: stackoverflow.com/a/44578849/1450294
Michael Scheper

210

scrollTop () trả về số lượng pixel bị ẩn khỏi chế độ xem từ khu vực có thể cuộn, do đó, cung cấp cho nó:

$(document).height()

sẽ thực sự vượt qua cuối trang. Để cuộn thực sự 'dừng lại' ở cuối trang, chiều cao hiện tại của cửa sổ trình duyệt cần được trừ. Điều này sẽ cho phép sử dụng nới lỏng nếu cần, vì vậy nó trở thành:

$('html, body').animate({ 
   scrollTop: $(document).height()-$(window).height()}, 
   1400, 
   "easeOutQuint"
);

29
Đây phải là câu trả lời được chấp nhận, Tom hoàn toàn đúng, câu trả lời được chấp nhận không hoạt động tốt vì cuộn sẽ đột ngột dừng lại thay vì xử lý kết thúc việc nới lỏng.
Christian

33
Lưu ý: easeOutQuintyêu cầu một plugin, bản thân jQuery chỉ có linearswing.
newenglander

anh bạn đây là công cụ tốt! cảm ơn. thậm chí làm điều này với 'swing' thay vì 'easyoutquint' cho thấy sự khác biệt đáng chú ý '.
Jesse Head

Không chắc chắn nếu đó là hình thức xấu, nhưng tôi đã chỉnh sửa câu trả lời được chấp nhận để thêm một con trỏ xuống câu trả lời này. Nếu có, thì ai đó có thể hoàn nguyên nó.
xaxxon

Giải pháp này chỉ hoạt động nếu trang được diễn giải ở chế độ tuân thủ tiêu chuẩn. Ví dụ: nếu bạn không bao gồm <!DOCTYPE html>trên Chrome, Chrome sẽ trả về cùng một giá trị chính xác cho chiều cao cửa sổ và tài liệu, trong trường hợp đó $(document).height()-$(window).height()sẽ luôn trả về 0. Xem tại đây: stackoverflow.com/questions/12103208/
Thẻ

35

Ví dụ:

$('html, body').scrollTop($(document).height());

Tôi dường như không thể làm cho nó hoạt động. Không làm gì cả.
Adam

@adam Bạn đang sử dụng phiên bản jQuery nào?
Cậu bé Sonny

14

Sau khi chủ đề này không phù hợp với tôi vì nhu cầu cụ thể của tôi (cuộn bên trong một yếu tố cụ thể, trong trường hợp của tôi là một văn bản), tôi đã tìm thấy điều này trong những điều tuyệt vời hơn, có thể chứng minh hữu ích cho người khác đọc cuộc thảo luận này:

Thay thế trên hành tinhcloud

Vì tôi đã có một phiên bản được lưu trong bộ nhớ cache của đối tượng jQuery của tôi ( myPanelmã bên dưới là đối tượng jQuery), mã tôi đã thêm vào trình xử lý sự kiện của mình chỉ đơn giản là:

myPanel.scrollTop(myPanel[0].scrollHeight - myPanel.height());

(cảm ơn Ben)


1
Làm việc cho tôi với một div:var d = $('#mydiv'); d.scrollTop (d[0].scrollHeight - d.height ());
gregn3

Bạn có thực sự phải làm toán không? stackoverflow.com/a/44578849/1450294
Michael Scheper

4

Một chức năng đơn giản nhảy (cuộn ngay lập tức) xuống dưới cùng của toàn bộ trang. Nó sử dụng tích hợp .scrollTop(). Tôi đã không cố gắng thích ứng điều này để làm việc với các yếu tố trang cá nhân.

function jumpToPageBottom() {
    $('html, body').scrollTop( $(document).height() - $(window).height() );
}

2
Tôi không biết tại sao, nhưng điều này không hoạt động với tôi trên Firefox 26.0 và sẽ cuộn lên đầu khi chức năng này được chạy. Vấn đề này đã được giải quyết bằng cách nói$(document).scrollTop($(document).height());
Jack

2

Cái này làm việc cho tôi:

var elem = $('#box');
if (elem[0].scrollHeight - elem.scrollTop() == elem.outerHeight()) {
  // We're at the bottom.
}

Điều này không trả lời câu hỏi
huyz

2

Nếu bạn không quan tâm đến hoạt hình, thì bạn không cần phải lấy chiều cao của yếu tố. Ít nhất trong tất cả các trình duyệt tôi đã thử, nếu bạn đưa ra scrollTopmột con số lớn hơn mức tối đa, nó sẽ chỉ cuộn xuống phía dưới. Vì vậy, cho nó số lượng lớn nhất có thể:

$(myScrollingElement).scrollTop(Number.MAX_SAFE_INTEGER);

Nếu bạn muốn cuộn trang, thay vì một số phần tử bằng thanh cuộn, chỉ cần tạo myScrollingElementbằng 'body, html'.

Vì tôi cần phải làm điều này ở một số nơi, tôi đã viết một hàm jQuery nhanh và bẩn để làm cho nó thuận tiện hơn, như thế này:

(function($) {
  $.fn.scrollToBottom = function() {
    return this.each(function (i, element) {
      $(element).scrollTop(Number.MAX_SAFE_INTEGER);
    });
  };
}(jQuery));

Vì vậy, tôi có thể làm điều này khi tôi nối thêm một số thứ:

$(myScrollingElement).append(lotsOfHtml).scrollToBottom();

0

Các kịch bản được đề cập trong các câu trả lời trước, như:

$("body, html").animate({
    scrollTop: $(document).height()
}, 400)

hoặc là

$(window).scrollTop($(document).height());

sẽ không hoạt động trong Chrome và sẽ tăng vọt trong Safari trong trường hợp html thẻ trong CSS có thuộc overflow: auto;tính được đặt. Tôi mất gần một giờ để tìm ra.


0
$('.block').scrollTop($('.block')[0].scrollHeight);

Tôi sử dụng mã này để cuộn trò chuyện khi có tin nhắn mới.


Vui lòng bao gồm một số giải thích cho mã của bạn, đặc biệt là khi bạn sao chép từ cơ sở mã của riêng bạn, sử dụng các lớp CSS không liên quan đến người khác;)
Bruno Monteiro

Lấy bất kỳ khối nào bằng thanh cuộn;) hoặc toàn bộ tài liệu.
Hôm nay,
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.