jquery: $ (window) .scrollTop () nhưng không có $ (window) .scrollBottom ()


86

Tôi muốn đặt một phần tử xuống cuối trang bất cứ khi nào người dùng cuộn trang. Nó giống như "fixed position" nhưng tôi không thể sử dụng css "position: fixed" vì nhiều trình duyệt của khách hàng của tôi không thể hỗ trợ điều đó.

Tôi nhận thấy jquery có thể có được vị trí trên cùng của chế độ xem hiện tại, nhưng làm cách nào để tôi có thể nhận được vị trí cuối cùng của chế độ xem cuộn?

Vì vậy, tôi đang hỏi làm thế nào để biết: $ (window) .scrollBottom ()

Câu trả lời:


148
var scrollBottom = $(window).scrollTop() + $(window).height();

17
bạn sẽ nghĩ nếu nó đơn giản như thế này, thì nó có thể được đưa vào khung chính dưới dạng .scrollBottom (). Lạ ..
Curt

38
cuộn Toplà số pixel dọc từ tài liệu Topđến cửa sổ hiển thị Top. Ngược lại hoàn toàn với cuộn Top, cuộn Bottomphải đo # pixel dọc từ tài liệu Bottomđến cửa sổ hiển thị Bottom(tức là câu trả lời của Alfred bên dưới). Điều này mang lại là số pixel dọc từ tài liệu _top_đến cửa sổ hiển thị Bottom. Nó rất hữu ích cho chắc chắn, mặc dù không thể gọi nó là đối diện với ScrollBottom (Tôi biết đây là một câu trả lời rõ rệt nhưng đối với độc giả trong tương lai như bản thân mình)
DeepSpace101

1
Giải pháp này sẽ không hoạt động nếu khoảng cách từ đỉnh có thể thay đổi. Ví dụ: nếu tôi có <div> phải cách cuối trang một khoảng nhất định và trang có các mục có thể mở rộng / thu gọn, thì nó sẽ thay đổi chiều cao phần thân và do đó là khoảng cách từ phần cuối trang.
crash springfield

@crashspringfield Thực ra đó là một câu hỏi khác. Câu hỏi này là về việc đặt mọi thứ gần cuối khung nhìn chứ không phải cuối trang.
iPherian

88

Tôi sẽ nói rằng một scrollBottom đối lập trực tiếp với scrollTop phải là:

var scrollBottom = $(document).height() - $(window).height() - $(window).scrollTop();

Đây là một thử nghiệm xấu xí nhỏ phù hợp với tôi:

// SCROLLTESTER START //
$('<h1 id="st" style="position: fixed; right: 25px; bottom: 25px;"></h1>').insertAfter('body');

$(window).scroll(function () {
  var st = $(window).scrollTop();
  var scrollBottom = $(document).height() - $(window).height() - $(window).scrollTop();

  $('#st').replaceWith('<h1 id="st" style="position: fixed; right: 25px; bottom: 25px;">scrollTop: ' + st + '<br>scrollBottom: ' + scrollBottom + '</h1>');
});
// SCROLLTESTER END //

2
Hoàn hảo, đây là những gì tôi đang tìm kiếm ... Cảm ơn bạn!
ℛɑƒæĿᴿᴹᴿ

9

Trong tương lai, tôi đã tạo scrollBottom thành một plugin jquery, có thể sử dụng theo cách giống như scrollTop (tức là bạn có thể đặt một số và nó sẽ cuộn số lượng đó từ cuối trang và trả về số pixel từ cuối trang của trang hoặc trả về số lượng pixel từ cuối trang nếu không có số nào được cung cấp)

$.fn.scrollBottom = function(scroll){
  if(typeof scroll === 'number'){
    window.scrollTo(0,$(document).height() - $(window).height() - scroll);
    return $(document).height() - $(window).height() - scroll;
  } else {
    return $(document).height() - $(window).height() - $(window).scrollTop();
  }
}
//Basic Usage
$(window).scrollBottom(500);

4
var scrollBottom =
    $(document).height() - $(window).height() - $(window).scrollTop();

Tôi nghĩ tốt hơn là lấy cuộn dưới cùng.


2

Điều này sẽ cuộn đến đầu trang:

$(window).animate({scrollTop: 0});

Điều này sẽ cuộn xuống dưới cùng:

$(window).animate({scrollTop: $(document).height() + $(window).height()});

.. thay đổi cửa sổ thành lớp hoặc id vùng chứa mong muốn của bạn nếu cần (trong dấu ngoặc kép).


Làm thế nào để tạo hoạt ảnh xuống dưới cùng của một div có chiều cao cố định overflow-y: autođể nó thực sự cuộn đến cuối văn bản (mở rộng ra ngoài chiều cao của div)?
user1063287

Cập nhật câu hỏi của tôi trong trường hợp nó giúp ích cho bất kỳ ai khác: Tôi nghĩ thuộc tính để sử dụng có thể là scrollHeight- hãy xem: stackoverflow.com/q/7381817
user1063287

0

Đây là tùy chọn tốt nhất cuộn xuống dưới cùng cho lưới bảng, nó sẽ cuộn đến hàng cuối cùng của lưới bảng:

 $('.add-row-btn').click(function () {
     var tempheight = $('#PtsGrid > table').height();
     $('#PtsGrid').animate({
         scrollTop: tempheight
         //scrollTop: $(".scroll-bottom").offset().top
     }, 'slow');
 });

0
// Back to bottom button
$(window).scroll(function () {
    var scrollBottom = $(this).scrollTop() + $(this).height();
    var scrollTop = $(this).scrollTop();
    var pageHeight = $('html, body').height();//Fixed

    if ($(this).scrollTop() > pageHeight - 700) {
        $('.back-to-bottom').fadeOut('slow');
    } else {
        if ($(this).scrollTop() < 100) {
            $('.back-to-bottom').fadeOut('slow');
        }
        else {
            $('.back-to-bottom').fadeIn('slow');
        }
    }
});
$('.back-to-bottom').click(function () {
    var pageHeight = $('html, body').height();//Fixed
    $('html, body').animate({ scrollTop: pageHeight }, 1500, 'easeInOutExpo');
    return false;
});


0
var scrolltobottom = document.documentElement.scrollHeight - $(this).outerHeight() - $(this).scrollTop();

2
Vui lòng tránh mã chỉ trả lời và cung cấp một số giải thích.
Mickael B.

-3

Đây là một cách hack nhanh chóng: chỉ cần gán giá trị cuộn cho một số rất lớn. Điều này sẽ đảm bảo rằng trang được cuộn xuống dưới cùng. Sử dụng javascript thuần túy:

document.body.scrollTop = 100000;

Điều này sẽ không hoạt động trên các trang dài hơn 100000 pixel. Đó có vẻ là một trường hợp khá phức tạp, tuy nhiên trong những trường hợp như các trang cuộn vô tận thì điều đó không phải là không thể. Nếu bạn thực sự muốn một giải pháp mà không cần jquery, câu trả lời này có thể là một lựa chọn tốt hơn.
lucash

ya, điểm là sử dụng một số càng lớn càng tốt nói 999999999999999999999999999999.
cắm
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.