jquery: $ (window) .scrollTop () แต่ไม่มี $ (window) .scrollBottom ()


86

ฉันต้องการวางองค์ประกอบที่ด้านล่างของหน้าเมื่อใดก็ตามที่ผู้ใช้เลื่อนหน้า มันเหมือนกับ "ตำแหน่งคงที่" แต่ฉันไม่สามารถใช้ "position: fixed" css ได้เนื่องจากเบราว์เซอร์ของลูกค้าของฉันไม่สามารถรองรับสิ่งนั้นได้

ฉันสังเกตเห็นว่า jquery สามารถรับตำแหน่งบนสุดของวิวพอร์ตปัจจุบันได้ แต่ฉันจะรับด้านล่างของวิวพอร์ตแบบเลื่อนได้อย่างไร

ดังนั้นฉันจึงถามว่าจะรู้ได้อย่างไร: $ (window) .scrollBottom ()

คำตอบ:


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

19
คุณจะคิดว่าถ้ามันง่ายอย่างนี้มันอาจรวมอยู่ในกรอบงานหลักเป็น. scrollBottom () แปลก ..
Curt

39
เลื่อนTopคือ # พิกเซลในแนวดิ่งจากเอกสารไปยังหน้าต่างที่มองเห็นได้Top Topในทางตรงกันข้ามกับการเลื่อนการTopเลื่อนBottomควรวัดจำนวนพิกเซลแนวตั้งจากเอกสารBottomไปยังหน้าต่างที่มองเห็นได้Bottom(เช่นคำตอบของ Alfred ด้านล่าง) สิ่งนี้จะช่วยให้คือ # ของพิกเซลในแนวดิ่งจากเอกสารไปยังหน้าต่างที่มองเห็นได้_top_ Bottomมันมีประโยชน์อย่างแน่นอนแม้ว่าจะไม่สามารถเรียกได้ว่าตรงกันข้ามกับ ScrollBottom (ฉันรู้ว่านี่เป็นคำตอบที่ชัดเจน แต่สำหรับผู้อ่านในอนาคตเช่นตัวฉันเอง)
DeepSpace101

1
วิธีนี้จะใช้ไม่ได้หากระยะห่างจากด้านบนอาจแตกต่างกันไป ตัวอย่างเช่นถ้าฉันมี <div> ที่จะต้องมีระยะห่างที่แน่นอนจากด้านล่างของหน้าและหน้านั้นมีรายการที่ขยายได้ / ยุบได้มันจะเปลี่ยนความสูงของร่างกายและระยะทางจากด้านล่าง
สปริงฟิลด์พัง

@crashspringfield จริงๆแล้วนั่นเป็นคำถามที่แตกต่างออกไป คำถามนี้เกี่ยวกับการวางสิ่งต่างๆไว้ใกล้ด้านล่างของวิวพอร์ตไม่ใช่ด้านล่างของหน้า
iPherian

88

ฉันจะบอกว่า scrollBottom ตรงข้ามกับ scrollTop ควรเป็น:

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

นี่คือการทดสอบที่น่าเกลียดเล็กน้อยที่เหมาะกับฉัน:

// 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
สมบูรณ์แบบนี่คือสิ่งที่ฉันกำลังมองหา ... ขอบคุณ!
ℛɑƒæĿᴿᴹᴿ

9

ในอนาคตฉันได้สร้าง scrollBottom เป็นปลั๊กอิน jquery ซึ่งใช้งานได้ในลักษณะเดียวกับที่ scrollTop คือ (เช่นคุณสามารถตั้งค่าตัวเลขและมันจะเลื่อนจำนวนนั้นจากด้านล่างของหน้าและส่งคืนจำนวนพิกเซลจากด้านล่าง ของหน้าหรือส่งกลับจำนวนพิกเซลจากด้านล่างของหน้าหากไม่มีการระบุหมายเลข)

$.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();

ฉันคิดว่ามันจะดีกว่าที่จะเลื่อนด้านล่าง


2

ซึ่งจะเลื่อนไปด้านบนสุด:

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

สิ่งนี้จะเลื่อนลงไปด้านล่างสุด:

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

.. เปลี่ยนหน้าต่างเป็นรหัสคอนเทนเนอร์หรือคลาสที่คุณต้องการหากจำเป็น (ในเครื่องหมายคำพูด)


1
จะทำให้เคลื่อนไหวไปที่ด้านล่างของ div ความสูงคงoverflow-y: autoที่ได้อย่างไรเพื่อให้เลื่อนไปที่ด้านล่างของข้อความ (ซึ่งขยายเกินความสูงของ div)
user1063287

1
อัปเดตคำถามของฉันในกรณีที่ช่วยคนอื่น: ฉันคิดว่าคุณสมบัติที่จะใช้อาจเป็นได้scrollHeight- ดู: stackoverflow.com/q/7381817
user1063287

0

นี่คือตัวเลือกที่ดีที่สุดเลื่อนไปที่ด้านล่างสำหรับตารางตารางโดยจะเลื่อนไปที่แถวสุดท้ายของตารางตาราง:

 $('.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
โปรดหลีกเลี่ยงรหัสเพียงตอบและให้คำอธิบายบางส่วน
Mickael B.

-3

นี่คือการแฮ็กอย่างรวดเร็ว: เพียงกำหนดค่าการเลื่อนเป็นตัวเลขที่มาก เพื่อให้แน่ใจว่าเพจถูกเลื่อนไปที่ด้านล่างสุด ใช้จาวาสคริปต์ธรรมดา:

document.body.scrollTop = 100000;

สิ่งนี้จะใช้ไม่ได้กับหน้าที่มีความยาวเกิน 100,000 พิกเซล นั่นอาจดูเหมือนจะเป็นกรณีขอบอย่างไรก็ตามในกรณีเช่นการเลื่อนหน้าเว็บที่ไม่มีที่สิ้นสุดก็ไม่น่าจะเป็นไปได้ หากคุณต้องการโซลูชันที่ไม่มี jquery คำตอบนี้อาจเป็นตัวเลือกที่ดีกว่า
lucash

ใช่ประเด็นคือใช้ตัวเลขให้ใหญ่ที่สุดพูดว่า 999999999999999999999999999999
ถอดปลั๊ก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.