jquery: $ (window) .scrollTop (), але немає $ (window) .scrollBottom ()


86

Я хочу розмістити елемент внизу сторінки щоразу, коли користувач прокручує сторінку. Це як "фіксована позиція", але я не можу використовувати "position: fixed" 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

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

.. змініть вікно на бажаний ідентифікатор контейнера або клас, якщо це необхідно (у лапках).


Як анімувати внизу 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;
});


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

2
Будь ласка, уникайте відповіді лише на код і надайте деякі пояснення.
Мікаель Б.

-3

Це швидкий хак: просто призначте значення прокрутки дуже великій кількості. Це забезпечить прокручування сторінки до кінця. Використання простого javascript:

document.body.scrollTop = 100000;

Це не працюватиме на сторінках довжиною більше 100000 пікселів. Це може здатися досить суворим випадком, однак у таких випадках, як нескінченна прокрутка сторінок, це не так вже ймовірно. Якщо ви дійсно хочете рішення без jquery, ця відповідь може бути кращим варіантом.
lucash

так, справа в тому, щоб використовувати якнайбільше число, скажімо 999999999999999999999999999999.
відключено
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.