jquery: $ (window) .scrollTop (), но нет $ (window) .scrollBottom ()

86

Я хочу размещать элемент внизу страницы, когда пользователь прокручивает страницу. Это похоже на «фиксированное положение», но я не могу использовать CSS «position: fixed», так как браузеры многих моих клиентов не могут это поддерживать.

Я заметил, что jquery может получить верхнюю позицию текущего окна просмотра, но как я могу получить нижнюю часть области просмотра прокрутки?

Итак, я спрашиваю, как узнать: $ (window) .scrollBottom ()

Бин Чен
источник

Ответы:

148
var scrollBottom = $(window).scrollTop() + $(window).height();
Дэвид Танг
источник
17
вы бы подумали, что если это так просто, то его можно включить в основную структуру как .scrollBottom (). Странно ..
Курт
38
scroll Top- это количество пикселей по вертикали от документа Topдо видимого окна Top. Как полная противоположность прокрутки Top, прокрутка Bottomдолжна измерять количество вертикальных пикселей от документа Bottomдо видимого окна Bottom(то есть ответ Альфреда ниже). Что это дает является # вертикального пиксела документа _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();

Думаю, лучше получить нижний скролл.

pb2q
источник
2

Это переместится на самый верх:

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

Это будет прокручиваться в самый низ:

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

.. при необходимости измените окно на желаемый идентификатор контейнера или класс (в кавычках).

ищейка
источник
Как анимировать до низа div с фиксированной высотой, overflow-y: autoчтобы он фактически прокручивался до нижней части текста (который выходит за пределы высоты div)?
user1063287
Обновите мой вопрос на случай, если это поможет кому-то еще: я думаю, что используемое свойство может быть 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;
});
Ghebrehiywet
источник
0

пытаться:

 $(window).scrollTop( $('body').height() );
user944550
источник
0
var scrolltobottom = document.documentElement.scrollHeight - $(this).outerHeight() - $(this).scrollTop();
Gzenakos
источник
2
Пожалуйста, избегайте ответа только на код и дайте некоторые пояснения.
Микаэль Б.
-3

Это быстрый прием: просто назначьте значение прокрутки очень большому числу. Это обеспечит прокрутку страницы вниз. Используя простой javascript:

document.body.scrollTop = 100000;
отключен
источник
Это не сработает на страницах длиннее 100000 пикселей. Это может показаться крайним случаем, однако в таких случаях, как бесконечная прокрутка страниц, это не так уж и невероятно. Если вам действительно нужно решение без jquery, этот ответ может быть лучшим вариантом.
lucash
да, суть в том, чтобы использовать как можно большее число, например, 999999999999999999999999999999.
отключен