Как узнать, прокручивается ли элемент внизу? [Дубликат]

Реализация формулы Shoelace может быть выполнена в Numpy. Предполагая эти вершины:

import numpy as np
x = np.arange(0,1,0.001)
y = np.sqrt(1-x**2)

Мы можем определить следующую функцию для поиска области:

def PolyArea(x,y):
    return 0.5*np.abs(np.dot(x,np.roll(y,1))-np.dot(y,np.roll(x,1)))

И получение результатов:

print PolyArea(x,y)
# 0.26353377782163534

Избегать цикла делает эту функцию ~ 50X быстрее, чем PolygonArea:

%timeit PolyArea(x,y)
# 10000 loops, best of 3: 42 µs per loop
%timeit PolygonArea(zip(x,y))
# 100 loops, best of 3: 2.09 ms per loop

Примечание: я написал этот ответ для другого вопроса , я просто упомянул об этом здесь, чтобы иметь полный список решения.

43
задан Bjorn Tipling 24 March 2010 в 23:23
поделиться

4 ответа

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

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

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

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

Изменить: Исправлен мой ответ, был совершенно неправ

62
ответ дан SomeKittens 19 August 2018 в 11:55
поделиться
  • 1
    Это почти работает, scrollHeight-offsetHeight не является тем же значением, что и scrollTop, но после попытки вашего кода, если я требую, чтобы эта разница была меньше 5 пикселей, чтобы получить нижнюю часть, я получаю поведение, которое я хочу. – Bjorn Tipling 18 May 2009 в 05:20
  • 2
    это не точно. obj.borderWidth нужно учитывать – looping 22 October 2013 в 04:39
  • 3
    я предпочитаю этот ответ: stackoverflow.com/questions/5828275/… – Chris 12 February 2014 в 12:49
  • 4
    scrollTop может быть нецелым, поэтому для его работы требуется определенная толерантность (например, obj.scrollHeight - obj.offsetHeight - obj.scrollTop < 1). См. stackoverflow.com/questions/5828275/… – Chris Martin 29 August 2015 в 06:13
  • 5
    возможно, это имеет какое-то отношение к фиксированным элементам на моем макете или чем-то еще странному, что я делаю, но единственный раз, когда это оценивается как истинное, - это когда я просматриваю весь путь до вершины. Это связано с тем, что document.body.scrollHeight равно document.body.offsetHeight в моем экземпляре (Chrome) – Evan de la Cruz 29 September 2016 в 18:20

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

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

Mozilla Developer Network

6
ответ дан eosimosu 19 August 2018 в 11:55
поделиться
  • 1
    Для меня, используя Chrome, где элемент document.body, это не работает. document.body.scrollHeight и document.bodyclientHeight имеют одинаковое значение, и поэтому выражение никогда не будет истинным. – Evan de la Cruz 29 September 2016 в 18:14
  • 2
    Что мы можем сделать, чтобы мы могли обнаружить, что свиток находится внизу. Например, если свиток ниже 75%, рассмотрите его около дна – iamsaksham 23 February 2017 в 07:29

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

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

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

Math.ceil(element.scrollHeight - element.scrollTop) === element.clientHeight
3
ответ дан series0ne 19 August 2018 в 11:55
поделиться

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

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

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

4
ответ дан Spencer 19 August 2018 в 11:55
поделиться
  • 1
    Это единственный ответ, который сработал для меня. – Trevor D 25 July 2018 в 18:14
  • 2
    И единственный ответ, который сработал для меня. Я использую прописку, чтобы скрыть полосу прокрутки. – Craig 15 August 2018 в 18:19
Другие вопросы по тегам:

Похожие вопросы: