jquery:$(window).scrollTop()、ただし$(window).scrollBottom()はありません


86

ユーザーがページをスクロールするたびに、ページの下部に要素を配置したいと思います。これは「固定位置」のようなものですが、クライアントのブラウザの多くがそれをサポートできないため、「位置:固定」cssを使用できません。

jqueryが現在のビューポートの上部の位置を取得できることに気付きましたが、スクロールビューポートの下部を取得するにはどうすればよいですか?

だから私は知る方法を尋ねています:$(window).scrollBottom()

回答:


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

17
これと同じくらい単純であれば、.scrollBottom()としてコアフレームワークに含めることができると思います。奇妙な...
カート・

38
スクロールTopは、ドキュメントTopから表示ウィンドウまでの垂直ピクセル数Topです。TopスクロールとBottomは正反対に、スクロールはドキュメントBottomから表示されているウィンドウまでの垂直ピクセル数を測定する必要がありますBottom(つまり、以下のアルフレッドの回答)。何これは与え、ドキュメントからの垂直画素の#で_top_可視ウィンドウへBottom。ScrollBottomの反対とは言えませんが、確かに便利です(これはマークされた答えですが、私のような将来の読者にとっては)
DeepSpace101 2013

1
上部からの距離が変化する可能性がある場合、このソリューションは機能しません。たとえば、ページの下部から一定の距離にある必要がある<div>があり、ページに展開可能/折りたたみ可能なアイテムがある場合、本体の高さが変更されるため、下部からの距離が変更されます。
クラッシュスプリングフィールド2017

@crashspringfield実際にはそれは別の質問です。この質問は、ページの下部ではなく、ビューポートの下部の近くに物を配置することに関するものです。
iPherian 2017年

88

scrollTopの正反対としてのscrollBottomは次のようになります。

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

I think it is better to get bottom scroll.


2

This will scroll to the very top:

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

This will scroll to the very bottom:

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

.. change window to your desired container id or class if necessary (in quotes).


How to animate to the bottom of a fixed height div with overflow-y: auto so that it actually scrolls to the bottom of the text (which extends beyond the height of the div)?
user1063287

Update to my question in case it helps anyone else: I think the property to use might be scrollHeight - see: stackoverflow.com/q/7381817
user1063287

0

Here is the best option scroll to bottom for table grid, it will be scroll to the last row of the table grid :

 $('.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
Please avoid code only answer and provide some explanation.
Mickael B.

-3

This is a quick hack: just assign the scroll value to a very large number. This will ensure that the page is scrolled to the bottom. Using plain javascript:

document.body.scrollTop = 100000;

This won't work on pages longer than 100000 pixel. That might seem to be quite an edge case, however in cases like endless scrolling pages it is not that improbable. If you really want a solution without jquery, this answer might be a better option.
lucash

ya, the point is to use a number as large as possible say 999999999999999999999999999999.
unplugged
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.