Как я могу определить, прокручивается ли div внизу? - PullRequest
54 голосов
/ 18 мая 2009

Как определить без использования jQuery или какой-либо другой библиотеки JavaScript, прокручивается ли div с вертикальной полосой прокрутки до самого конца?

Мой вопрос не в том, как прокрутить вниз. Я знаю, как это сделать. Я хочу определить, прокручивается ли div уже до конца.

Это не работает:

if (objDiv.scrollTop == objDiv.scrollHeight) 

Ответы [ 4 ]

72 голосов
/ 18 мая 2009

Вы довольно близко, используя scrollTop == scrollHeight.

scrollTop относится к верхней части позиции прокрутки, которая будет scrollHeight - offsetHeight

Ваш оператор if должен выглядеть так (не забудьте использовать тройные равенства):

if( obj.scrollTop === (obj.scrollHeight - obj.offsetHeight))
{
}

Редактировать: исправил мой ответ, был совершенно не прав

6 голосов
/ 26 января 2015

Возвращает true, если элемент находится в конце его прокрутки, и false, если это не так.

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

Сеть разработчиков Mozilla

5 голосов
/ 03 июля 2017

Немного опоздал на эту вечеринку, но ни один из приведенных выше ответов, кажется, не работает особенно хорошо, когда ...

  • Масштабирование дисплея применяется к ОС для дисплеев UHD
  • Масштабирование / масштабирование применяются к браузеру

Чтобы учесть все возможные ситуации, вам нужно округлить рассчитанную позицию прокрутки:

Math.ceil(element.scrollHeight - element.scrollTop) === element.clientHeight
5 голосов
/ 17 марта 2017

Чтобы получить правильные результаты с учетом таких вещей, как возможность границы, горизонтальная полоса прокрутки и / или число плавающих пикселей, вы должны использовать ...

el.scrollHeight - el.scrollTop - el.clientHeight < 1

ПРИМЕЧАНИЕ: Вы ДОЛЖНЫ использовать clientHeight вместо offsetHeight, если хотите получить правильные результаты. offsetHeight даст вам правильные результаты только тогда, когда el не имеет границы или горизонтальной полосы прокрутки

...