jquery: $ (pencere) .scrollTop () ancak $ (pencere) .scrollBottom () yok


86

Kullanıcı sayfayı her kaydırdığında sayfanın altına bir öğe yerleştirmek istiyorum. Bu "sabit konum" gibi, ancak müşterilerimin çoğu tarayıcısı bunu destekleyemediği için "position: fixed" css kullanamıyorum.

Jquery'nin mevcut görüntü alanının en üst konumunu alabildiğini fark ettim, ancak kaydırma görüntü alanının en altına nasıl ulaşabilirim?

Bu yüzden nasıl bileceğimi soruyorum: $ (window) .scrollBottom ()

Yanıtlar:


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

19
Bu kadar basitse, çekirdek çerçeveye .scrollBottom () gibi dahil edilebileceğini düşünürsünüz. Garip ..
Curt

39
kaydırma Top, belgeden Topgörünür pencereye dikey piksel sayısıdır Top. Kaydırmanın tam tersi olarak Top, kaydırma Bottom, belgeden Bottomgörünen pencereye kadar olan dikey piksel sayısını ölçmelidir Bottom(örneğin, Alfred'in aşağıdaki cevabı). Ne bu verir belgeden dikey pikselin # olan _top_görünür pencereye Bottom. Elbette kullanışlıdır, ancak ScrollBottom'un tersi diyememesine rağmen (bunun işaretli bir cevap olduğunu biliyorum ama benim gibi gelecekteki okuyucular için)
DeepSpace101

1
Üstten uzaklık değişebiliyorsa bu çözüm işe yaramayacaktır. Örneğin, sayfanın altından belirli bir uzaklıkta olması gereken bir <div> varsa ve sayfada genişletilebilir / daraltılabilir öğeler varsa, gövde yüksekliğini ve dolayısıyla alttan mesafeyi değiştirecektir.
crash springfield

@crashspringfield Aslında bu farklı bir soru. Bu soru, nesneleri sayfanın altına değil, görüntü alanının altına yakın bir yere yerleştirmekle ilgilidir.
iPherian

88

ScrollTop'un tam tersi olarak bir scrollBottom'un şöyle olması gerektiğini söyleyebilirim:

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

İşte benim için işe yarayan küçük, çirkin bir test:

// 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
Mükemmel, aradığım şey buydu ... Teşekkürler!
ℛɑƒæĿᴿᴹᴿ

9

Gelecek için, scrollBottom'u scrollTop ile aynı şekilde kullanılabilen bir jquery eklentisine dönüştürdüm (yani bir sayı ayarlayabilir ve bu miktarı sayfanın altından kaydıracak ve alttan piksel sayısını döndürecek) sayfanın alt kısmından piksel sayısını döndürürseniz, numara verilmemişse

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

Alt parşömeni almanın daha iyi olacağını düşünüyorum.


2

Bu en üste kaydırılacaktır:

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

Bu, en alta kayacaktır:

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

.. gerekirse pencereyi istediğiniz konteyner kimliği veya sınıfa değiştirin (tırnak içinde).


1
overflow-y: autoMetnin altına doğru kayması için sabit yükseklikteki bir div'in altına nasıl animasyon uygulanır (div yüksekliğinin ötesine geçer)?
user1063287

1
Başkalarına yardımcı olma ihtimaline karşı sorumu güncelleyin: Kullanılacak özelliğin olabileceğini düşünüyorum scrollHeight- bkz. Stackoverflow.com/q/7381817
user1063287

0

Tablo ızgarası için en iyi seçenek aşağı kaydırın, tablo ızgarasının son satırına kaydırılacaktır:

 $('.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
Lütfen yalnızca kod yanıtından kaçının ve bazı açıklamalar sağlayın.
Mickael B.

-3

Bu hızlı bir kesmedir: kaydırma değerini çok büyük bir sayıya atamanız yeterlidir. Bu, sayfanın en alta kaydırılmasını sağlayacaktır. Düz javascript kullanarak:

document.body.scrollTop = 100000;

Bu, 100000 pikselden uzun sayfalarda çalışmaz. Bu oldukça uç bir durum gibi görünebilir, ancak sonsuz kaydırma sayfaları gibi durumlarda bu o kadar da olasılık dışı değildir. Gerçekten jquery olmadan bir çözüm istiyorsanız, bu yanıt daha iyi bir seçenek olabilir.
lucash

ya, mesele 999999999999999999999999999999 diyebileceğimiz olabildiğince büyük bir sayı kullanmaktır.
Unlugged
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.