Перевірте, чи користувач прокрутився донизу


667

Я створюю систему пагінації (на зразок Facebook), де вміст завантажується, коли користувач прокручується донизу. Я думаю, що найкращий спосіб зробити це - знайти, коли користувач знаходиться внизу сторінки, і запустити запит ajax, щоб завантажити більше публікацій.

Єдина проблема полягає в тому, що я не знаю, як перевірити, чи користувач прокрутив до основи сторінки за допомогою jQuery. Будь-які ідеї?

Мені потрібно знайти спосіб перевірити, коли користувач прокручує jQuery донизу сторінки внизу сторінки.


Це смішно, я намагаюся розібратися, яку функцію викликають, коли прокручую донизу, щоб я міг заблокувати цю неприємну "особливість".
ендоліт

Для вирішення React.js, ця посилання може допомогти: stackoverflow.com/a/53158893/4265546
raksheetbhat

Відповіді:


1023

Використовуйте .scroll()подію window, наприклад:

$(window).scroll(function() {
   if($(window).scrollTop() + $(window).height() == $(document).height()) {
       alert("bottom!");
   }
});

Ви можете протестувати його тут , для цього потрібне прокручування вікна, тому скільки воно прокручується вниз, додає висоту видимого вікна і перевіряє, чи дорівнює це висоті загального вмісту ( document). Якщо ви хочете , щоб замість того, щоб перевірити , якщо користувач знаходиться поруч з нижньої, було б виглядати приблизно так:

$(window).scroll(function() {
   if($(window).scrollTop() + $(window).height() > $(document).height() - 100) {
       alert("near bottom!");
   }
});

Ви можете протестувати цю версію тут , просто налаштуйте її 100на будь-який піксель знизу, на який ви хочете запустити.


32
Як завжди, ти туди переді мною. У будь-якому випадку, до ОП, якщо у вас є контейнер з повідомленнями, використовуйте його ідентифікатор замість "вікна", також ви можете змінити останню. Висоту () для прокруткиВисота
християнська

4
Firefox викликає сповіщення ("знизу!"); багато разів (чудово працює з хромом і сафарі)
Марко Матарацці

3
це щось баггі, якщо ви робите console.log()замість попередження, іноді повторює команду.
Юрген Пол

19
Хорошим поєднанням @KevinVella Vella є використання цього файлу _.debounce () в утиліті підкреслення, щоб запобігти його запуску, поки користувач не перестане прокручувати - underscorejs.org/#debounce -
JohnnyFaldo

3
@NickCraver чи доступна чиста реалізація js?
Dewsworld

116

Відповідь Ніка Крейвера працює чудово, не шкодуючи питання, яке значення $(document).height()залежить від браузера.

Щоб він працював у всіх браузерах, використовуйте цю функцію від James Padolsey :

function getDocHeight() {
    var D = document;
    return Math.max(
        D.body.scrollHeight, D.documentElement.scrollHeight,
        D.body.offsetHeight, D.documentElement.offsetHeight,
        D.body.clientHeight, D.documentElement.clientHeight
    );
}

замість $(document).height(), так що остаточний код:

$(window).scroll(function() {
       if($(window).scrollTop() + $(window).height() == getDocHeight()) {
           alert("bottom!");
       }
   });

6
Він оновив злегка стиснуту функцію версії getDocHeight () {var D = документ; повернути Math.max (D.body.scrollHeight, D.documentElement.scrollHeight, D.body.offsetHeight, D.documentElement.offsetHeight, D.body.clientHeight, D.documentElement.clientHeight); }
Дрю

що сповіщає мене, коли я досягаю вершини, а не нижньої (Chrome).
Дейміен Рош

Можливо, краще використовувати minзамість цього max, особливо, якщо все-таки є запас, щоб уникнути випадкового перешкодження користувачеві прокручування до того, що, на вашу думку, знаходиться внизу сторінки.
Соломон Учко

104

Я не точно впевнений, чому це ще не було розміщено, але відповідно до документації з MDN , найпростішим способом є використання власних властивостей javascript:

element.scrollHeight - element.scrollTop === element.clientHeight

Повертає істину, коли ви знаходитесь внизу будь-якого елемента, що прокручується. Тож просто за допомогою JavaScript:

element.addEventListener('scroll', function(event)
{
    var element = event.target;
    if (element.scrollHeight - element.scrollTop === element.clientHeight)
    {
        console.log('scrolled');
    }
});

scrollHeightмати широку підтримку в браузерах, тобто 8, щоб бути точнішими, clientHeightі scrollTopїх обидва підтримують усі. Навіть тобто 6. Це повинно бути безпечним для браузера.


1
Зауважте, що в деяких ситуаціях це може бути не так. Firefox 47 повідомляє textarea clientHeight як 239, тоді як вищевказане рівняння дає 253, коли прокручується донизу. Може, накладка / бордюр чи щось на це впливає? Так чи інакше, додавання якоїсь трясовидної кімнати не зашкодить, як var isAtBottom = ( logField.scrollHeight - logField.scrollTop <= logField.clientHeight + 50 );. Це корисно для автоматичної прокрутки поля, лише якщо воно вже знаходиться внизу (так що користувач може вручну вивчити певну частину журналу реального часу, не втрачаючи свого місця тощо).
Bejjor

Я додам, що це може повернути помилкові негативи, оскільки одна сторона може повернути невеликий десятковий знак, а інша поверне ціле число (наприклад, 200.181819304947і 200). Я додав, Math.floor()щоб допомогти вирішити це, але не знаю, наскільки це буде надійно.
Ганна

1
Для мене це не працює крос-браузер. Я отримую зовсім інші результати щодо хрому в порівнянні з firefox.
Тадей

1
Я спробував це на елементі <body>, і це спрацьовує, коли браузер прокручується до ТОПу, а не внизу.
Кріс Соболевський

10
Math.abs(element.scrollHeight - element.scrollTop - element.clientHeight) <= 3.0(замініть 3.0 на будь-яку толерантність до пікселів, на вашу думку, підходить для ваших обставин). Це шлях, тому що (A) clientHeight, scrollTopі clientHeightвсі вони округлені, що потенційно може призвести до помилки 3px, якщо всі вирівняти, (B) 3 пікселі навряд чи видно користувачеві, тому користувач може подумати, що з вашим сайтом щось не так коли вони "думають", вони знаходяться внизу сторінки, коли насправді їх немає, і (C) певні пристрої (особливо мишачі) можуть мати дивну поведінку під час прокрутки.
Джек Гіффін

50

Для тих, хто використовує рішення Ніка та отримує повторні сповіщення / події, ви можете додати рядок коду над прикладом попередження:

$(window).scroll(function() {
   if($(window).scrollTop() + $(window).height() > $(document).height() - 100) {
       $(window).unbind('scroll');
       alert("near bottom!");
   }
});

Це означає, що код запустить лише перший раз, коли ви знаходитесь у межах 100 пікселів у нижній частині документа. Він не повториться, якщо прокрутити назад, а потім назад вниз, що може бути або не корисно в залежності від того, для чого ви використовуєте код Ніка.


1
Я б просто прокоментував і сказав, де цей рядок коду є відповідним чужої відповіді, але +1 для наміру!
Нейт-Вілкінс

Вибачте, я не зміг (і досі не можу) побачити, як додати коментар до відповіді (як я можу тут)?
Тім Карр

Нові користувачі не можуть додавати коментарі до публікацій, якщо ви не отримаєте більше представників.
Нейт-Вілкінс

Поза стороною перший, якщо ви можете поставити інший, якщо це тести, якщо зміна, яку ви хотіли зробити скриптом, існує, скажімо, клас, застосований до діла. Це зробить друге вкладене, якщо не запустити, якщо воно вже запущене.
1934286

як я можу вибрати конкретний ідентифікатор div замість цілого вікна?
Джеймс Сміт

40

Крім чудового прийнятого відповіді від Ніка Крейвера, ви можете придушити подію прокрутки, щоб вона не запускалася так часто, тим самим збільшуючи продуктивність браузера :

var _throttleTimer = null;
var _throttleDelay = 100;
var $window = $(window);
var $document = $(document);

$document.ready(function () {

    $window
        .off('scroll', ScrollHandler)
        .on('scroll', ScrollHandler);

});

function ScrollHandler(e) {
    //throttle event:
    clearTimeout(_throttleTimer);
    _throttleTimer = setTimeout(function () {
        console.log('scroll');

        //do work
        if ($window.scrollTop() + $window.height() > $document.height() - 100) {
            alert("near bottom!");
        }

    }, _throttleDelay);
}

Напевно, слід зазначити, що для цього потрібен Underscore.js: underscorejs.org . Хоча це дуже вдалий момент. Подія прокрутки майже завжди повинна бути вимкнена, щоб уникнути серйозних проблем з продуктивністю.
Джуд Осборн

Можливо, це лише я, і це могло б використовувати деякий бенчмаркінг, але мені не подобається ідея викликати clearTimeout і setTimeout на кожному заході прокрутки. Я видав би 1 setTimeout і додав кілька охоронців у цей обробник. Мабуть, це просто мікрооптимізація (якщо вона взагалі є).
Гримаса відчаю

Це дійсно акуратне доповнення! Я можу подумати про ще одне вдосконалення. В даний час функція, яка перевіряє виконання висоти, якщо користувач продовжує прокручувати. Якщо це проблема (наприклад, ви хочете запустити функцію, коли користувач прокручується на півдорозі незалежно від того, чи продовжує прокручування), ви можете легко переконатися, що функція дійсно викликається, все ще забороняючи кілька дзвінків протягом обраного інтервалу. Ось суть, щоб його показати. gist.github.com/datacarl/7029558
datacarl

Що? Викликати навантаження техніки, щоб запобігти простому розрахунку? Я не бачу, наскільки це взагалі ефективніше
Рамбатіно,

37

Відповідь Ніка Крейвера потрібно трохи змінити для роботи на iOS 6 Safari Mobile і має бути:

$(window).scroll(function() {
   if($(window).scrollTop() + window.innerHeight == $(document).height()) {
       alert("bottom!");
   }
});

Зміна $ (вікно) .height () , щоб window.innerHeight має бути зроблено , тому що , коли адресний рядок прихована додаткові 60px додані до висоти вікна , але з використанням $(window).height()зовсім НЕ відображають ці зміни, в той час як з допомогою window.innerHeightробить.

Примітка . window.innerHeightВластивість також включає висоту горизонтальної смуги прокрутки (якщо вона надається), на відміну від $(window).height()якої не буде включати висоту горизонтальної смуги прокрутки. Це не проблема в Mobile Safari, але може спричинити несподівану поведінку в інших браузерах або майбутніх версіях Mobile Safari. Якщо змінити, ==це >=можна виправити для найбільш поширених випадків використання.

Детальніше про window.innerHeightвласність тут


window.innerHeight мав більше сенсу для того, що я намагався досягти дякую!
Amir5000

Як отримати залишок висоти після прокрутки?
OPV

20

Ось досить простий підхід

const didScrollToBottom = elm.scrollTop + elm.clientHeight == elm.scrollHeight

Приклад

elm.onscroll = function() {
    if(elm.scrollTop + elm.clientHeight == elm.scrollHeight) {
        // User has scrolled to the bottom of the element
    }
}

Де elmелемент, отриманий з т document.getElementById. Е.


17

Ось фрагмент коду, який допоможе вам налагодити ваш код, я перевірив вищевказані відповіді та виявив їх помилковими. Я перевіряв наступні дії на Chrome, IE, Firefox, IPad (Safari). У мене немає інших встановлених для тестування ...

<script type="text/javascript">
   $(function() {
      $(window).scroll(function () {
         var docElement = $(document)[0].documentElement;
         var winElement = $(window)[0];

         if ((docElement.scrollHeight - winElement.innerHeight) == winElement.pageYOffset) {
            alert('bottom');
         }
      });
   });
</script>

Можливо, є більш просте рішення, але я зупинився на тій точці, в якій він працював

Якщо у вас все ще виникають проблеми з неправдивим браузером, ось код, який допоможе вам налагодити:

<script type="text/javascript">
   $(function() {
      $(window).scroll(function () {
         var docElement = $(document)[0].documentElement;
         var details = "";
         details += '<b>Document</b><br />';
         details += 'clientHeight:' + docElement.clientHeight + '<br />';
         details += 'clientTop:' + docElement.clientTop + '<br />';
         details += 'offsetHeight:' + docElement.offsetHeight + '<br />';
         details += 'offsetParent:' + (docElement.offsetParent == null) + '<br />';
         details += 'scrollHeight:' + docElement.scrollHeight + '<br />';
         details += 'scrollTop:' + docElement.scrollTop + '<br />';

         var winElement = $(window)[0];
         details += '<b>Window</b><br />';
         details += 'innerHeight:' + winElement.innerHeight + '<br />';
         details += 'outerHeight:' + winElement.outerHeight + '<br />';
         details += 'pageYOffset:' + winElement.pageYOffset + '<br />';
         details += 'screenTop:' + winElement.screenTop + '<br />';
         details += 'screenY:' + winElement.screenY + '<br />';
         details += 'scrollY:' + winElement.scrollY + '<br />';

         details += '<b>End of page</b><br />';
         details += 'Test:' + (docElement.scrollHeight - winElement.innerHeight) + '=' + winElement.pageYOffset + '<br />';
         details += 'End of Page? ';
         if ((docElement.scrollHeight - winElement.innerHeight) == winElement.pageYOffset) {
             details += 'YES';
         } else {
             details += 'NO';
         }

         $('#test').html(details);
      });
   });
</script>
<div id="test" style="position: fixed; left:0; top: 0; z-index: 9999; background-color: #FFFFFF;">

Сподіваюся, це врятує когось деякий час.


Найкраща відповідь для Vanilla js, немає рішення jQuery. Використанняvar docElement = document.documentElement; var winElement = window
jperelli

Це у 2019 році. Замість winElement.pageYOffsetвас також можна використовувати winElement.scrollY.
Ноель Абрахамс

15

Перевірте цю відповідь

 window.onscroll = function(ev) {
    if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
       console.log("bottom");
    }
};

Ви можете footerHeight - document.body.offsetHeightпереконатися, чи ви знаходитесь біля нижнього колонтитулу, чи дійшли до нижнього колонтитулу


12
var elemScrolPosition = elem.scrollHeight - elem.scrollTop - elem.clientHeight;

Він обчислює смугу прокрутки відстані до нижньої частини елемента. Дорівнює 0, якщо смуга прокрутки досягла нижнього.


1
Я робив наступне і працював бездоганно. Дякую. var shouldScroll = (elem.scrollHeight - elem.scrollTop - elem.clientHeight) == 0;
jiminssy

11

Це два мої центи:

$('#container_element').scroll( function(){
        console.log($(this).scrollTop()+' + '+ $(this).height()+' = '+ ($(this).scrollTop() + $(this).height())   +' _ '+ $(this)[0].scrollHeight  );
        if($(this).scrollTop() + $(this).height() == $(this)[0].scrollHeight){
            console.log('bottom found');
        }
    });

Спробувавши використати ваше рішення, він працює чудово, але у випадках, коли в елементі є набивання - він не працює, тому що для його вирішення обчислює чисту висоту елемента, не включаючи прокладки, я змінив це $(this).scrollTop() + $(this).height() == $(this)[0].scrollHeight=>$(this).scrollTop() + $(this).outerHeight(true) >= $(this)[0].scrollHeight
Тарас Черната

6

Чистий JS з крос-браузером та розмовою (Дуже добре показники )

var CheckIfScrollBottom = debouncer(function() {
    if(getDocHeight() == getScrollXY()[1] + window.innerHeight) {
       console.log('Bottom!');
    }
},500);

document.addEventListener('scroll',CheckIfScrollBottom);

function debouncer(a,b,c){var d;return function(){var e=this,f=arguments,g=function(){d=null,c||a.apply(e,f)},h=c&&!d;clearTimeout(d),d=setTimeout(g,b),h&&a.apply(e,f)}}
function getScrollXY(){var a=0,b=0;return"number"==typeof window.pageYOffset?(b=window.pageYOffset,a=window.pageXOffset):document.body&&(document.body.scrollLeft||document.body.scrollTop)?(b=document.body.scrollTop,a=document.body.scrollLeft):document.documentElement&&(document.documentElement.scrollLeft||document.documentElement.scrollTop)&&(b=document.documentElement.scrollTop,a=document.documentElement.scrollLeft),[a,b]}
function getDocHeight(){var a=document;return Math.max(a.body.scrollHeight,a.documentElement.scrollHeight,a.body.offsetHeight,a.documentElement.offsetHeight,a.body.clientHeight,a.documentElement.clientHeight)}

Демонстрація: http://jsbin.com/geherovena/edit?js,output

PS: Debouncer , getScrollXY, getDocHeightне написано мною

Я просто показую, як її робота, І як я буду робити


Ідеально. Випробуваний у Firefox та Chrome
Ерлісар Васкес

Я отримую таку помилку: Очікували 3 аргументи, але отримали 2. Аргумент 'c' не надано.
Sõber

6

Моє рішення в простому js:

let el=document.getElementById('el');
el.addEventListener('scroll', function(e) {
    if (this.scrollHeight - this.scrollTop - this.clientHeight<=0) {
        alert('Bottom');
    }
});
#el{
  width:400px;
  height:100px;
  overflow-y:scroll;
}
<div id="el">
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
</div>


4

Спробуйте це для умови відповідності, якщо прокрутіть до нижнього кінця

if ($(this)[0].scrollHeight - $(this).scrollTop() == 
    $(this).outerHeight()) {

    //code for your custom logic

}

3

Нік відповідає на свій штраф, але у вас з’являться функції, які повторюються під час прокрутки або взагалі не працюватимуть, якщо користувач збільшує вікно. Я придумав легко виправити лише математику. На першій висоті він працює так, як передбачалося.

    if (Math.round($(window).scrollTop()) + $(window).innerHeight() == $(document).height()){
    loadPagination();
    $(".go-up").css("display","block").show("slow");
}

3

Ви можете спробувати наступний код,

$("#dashboard-scroll").scroll(function(){
    var ele = document.getElementById('dashboard-scroll');
    if(ele.scrollHeight - ele.scrollTop === ele.clientHeight){
       console.log('at the bottom of the scroll');
    }
});

2

Це дає точні результати при перевірці прокручуваного елемента (тобто ні window):

// `element` is a native JS HTMLElement
if ( element.scrollTop == (element.scrollHeight - element.offsetHeight) )
    // Element scrolled to bottom

offsetHeightмає надати фактичну видиму висоту елемента (включаючи набивання, поле та смуги прокрутки), і scrollHeightце вся висота елемента, включаючи невидимі (переповнені) ділянки.

jQuery«S .outerHeight()повинен дати подібний результат JS - х .offsetHeight- документацію в MDN для offsetHeightнеясна про свою підтримку крос-браузера. Щоб охопити більше варіантів, це більш повно:

var offsetHeight = ( container.offsetHeight ? container.offsetHeight : $(container).outerHeight() );
if  ( container.scrollTop == (container.scrollHeight - offsetHeight) ) {
   // scrolled to bottom
}

спробуйте, Math.floor(element.scrollTop) === element.scrollHeight - element.offsetHeightякщо scrollTop є десятковою, без нього не вийдеMath.floor()
Michail Michailidis

1

Усі ці рішення для мене не працюють у Firefox та Chrome, тому я використовую спеціальні функції Майлза О'Кіф та медура Омуралієва, як це:

function getDocHeight()
{
    var D = document;
    return Math.max(
        D.body.scrollHeight, D.documentElement.scrollHeight,
        D.body.offsetHeight, D.documentElement.offsetHeight,
        D.body.clientHeight, D.documentElement.clientHeight
    );
}

function getWindowSize()
{
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  return [myWidth, myHeight];
}

$(window).scroll(function()
{
    if($(window).scrollTop() + getWindowSize()[1] == getDocHeight())
    {
        alert("bottom!");
    }
});

1

Ось два мої центи, оскільки прийнята відповідь не працювала для мене.

var documentAtBottom = (document.documentElement.scrollTop + window.innerHeight) >= document.documentElement.scrollHeight;

1

Замість того, щоб слухати подію прокрутки, використання Intersection Observer - це найдешевший для перевірки того, чи був останній елемент видимим у вікні перегляду (це означає, що користувач прокрутився донизу). Він також підтримує IE7 з поліфіл .

var observer = new IntersectionObserver(function(entries){
   if(entries[0].isIntersecting === true)
      console.log("Scrolled to the bottom");
   else
      console.log("Not on the bottom");
}, {
   root:document.querySelector('#scrollContainer'),
   threshold:1 // Trigger only when whole element was visible
});

observer.observe(document.querySelector('#scrollContainer').lastElementChild);
#scrollContainer{
  height: 100px;
  overflow: hidden scroll;
}
<div id="scrollContainer">
  <div>Item 1</div>
  <div>Item 2</div>
  <div>Item 3</div>
  <div>Item 4</div>
  <div>Item 5</div>
  <div>Item 6</div>
  <div>Item 7</div>
  <div>Item 8</div>
  <div>Item 9</div>
  <div>Item 10</div>
</div>


Проблема з перехрестям спостерігача полягає в тому, що якщо стартове вікно порівняно невелике (скажімо, основний макет перед вилученням зображень без смуги прокрутки), зворотний виклик спостерігача запускається негайно. Слухач прокрутки насправді чекає, коли людина прокрутить. І смуга прокрутки не з’явиться до отримання першої партії зображень тощо. Тож спостерігач перехрестя - це не все в одному рішенні.
Алекс

@Aleks Ви можете зателефонувати .observe(...)на слухача подій, наприклад, коли користувач завис / торкнувся вашого контейнера прокрутки, щоб він не запускався відразу.
StefansArya

0

Дозвольте показати апробацію без JQuery. Проста функція JS:

function isVisible(elem) {
  var coords = elem.getBoundingClientRect();
  var topVisible = coords.top > 0 && coords.top < 0;
  var bottomVisible = coords.bottom < shift && coords.bottom > 0;
  return topVisible || bottomVisible;
}

Короткий приклад, як його використовувати:

var img = document.getElementById("pic1");
    if (isVisible(img)) { img.style.opacity = "1.00";  }

5
Це не відповідає на запитання. Питання полягало в тому, як виявити, що користувачі прокручували вікно до кінця. Ваш код перевіряє, чи певний елемент переглядається.
Пітер Хол

0

Я використовував одяг @ddanone і додав Ajax call.

$('#mydiv').on('scroll', function(){
  function infiniScroll(this);
});

function infiniScroll(mydiv){
console.log($(mydiv).scrollTop()+' + '+ $(mydiv).height()+' = '+ ($(mydiv).scrollTop() + $(mydiv).height())   +' _ '+ $(mydiv)[0].scrollHeight  );

if($(mydiv).scrollTop() + $(mydiv).height() == $(mydiv)[0].scrollHeight){
    console.log('bottom found');
    if(!$.active){ //if there is no ajax call active ( last ajax call waiting for results ) do again my ajax call
        myAjaxCall();
    }
}

}


0

Щоб зупинити повторне оповіщення про відповідь Ніка

ScrollActivate();

function ScrollActivate() {
    $(window).on("scroll", function () {
        if ($(window).scrollTop() + $(window).height() > $(document).height() - 100) {
            $(window).off("scroll");
            alert("near bottom!");
        }
    });
}

0

Google Chrome надає повний зріст сторінки, якщо ви телефонуєте $(window).height()

Замість цього використовуйте window.innerHeightдля отримання висоти вашого вікна. Необхідна перевірка повинна бути:

if($(window).scrollTop() + window.innerHeight > $(document).height() - 50) {
    console.log("reached bottom!");
}

0

Мабуть, для мене працювало "тіло", а не "вікно", як це:

$('body').scroll(function() {


 if($('body').scrollTop() + $('body').height() == $(document).height()) {
     //alert at buttom
 }
 });

для використання сумісності між браузерами:

  function getheight(){
    var doc = document;
    return  Math.max(
        doc.body.scrollHeight, doc.documentElement.scrollHeight,
        doc.body.offsetHeight, doc.documentElement.offsetHeight,
        doc.body.clientHeight, doc.documentElement.clientHeight

        );
   }

а потім замість $ (document) .height () викликайте функцію getheight ()

$('body').scroll(function() {


   if($('body').scrollTop() + $('body').height() == getheight()  ) {
     //alert at bottom
 }
});

для використання в нижній частині:

$('body').scroll(function() {


if($('body').scrollTop() + $('body').height() > getheight() -100 ) {
    //alert near bottom
 }
 });
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.