Реализация формулы 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
Примечание: я написал этот ответ для другого вопроса , я просто упомянул об этом здесь, чтобы иметь полный список решения.
Вы довольно близки, используя scrollTop == scrollHeight
.
scrollTop
относится к верхней части позиции прокрутки, которая будет scrollHeight - offsetHeight
. Оператор if должен выглядеть (не забудьте использовать тройные равенства):
if( obj.scrollTop === (obj.scrollHeight - obj.offsetHeight))
{
}
Изменить: Исправлен мой ответ, был совершенно неправ
Возвращает true, если элемент находится в конце его прокрутки, false, если это не так.
element.scrollHeight - element.scrollTop === element.clientHeight
document.body.scrollHeight
и document.bodyclientHeight
имеют одинаковое значение, и поэтому выражение никогда не будет истинным.
– Evan de la Cruz
29 September 2016 в 18:14
Немного поздно для этой стороны, но ни один из вышеприведенных ответов не работает особенно хорошо, когда ...
. Для обеспечения всех возможных ситуаций вам необходимо округлить расчетную позицию прокрутки:
Math.ceil(element.scrollHeight - element.scrollTop) === element.clientHeight
Чтобы получить правильные результаты, принимая во внимание такие вещи, как возможность границы, горизонтальную полосу прокрутки и / или число плавающих пикселей, вы должны использовать ...
el.scrollHeight - el.scrollTop - el.clientHeight < 1
ПРИМЕЧАНИЕ. : Вы должны использовать clientHeight вместо offsetHeight, если хотите получить правильные результаты. offsetHeight даст вам правильные результаты только тогда, когда el не имеет границы или горизонтальной полосы прокрутки
scrollTop
может быть нецелым, поэтому для его работы требуется определенная толерантность (например,obj.scrollHeight - obj.offsetHeight - obj.scrollTop < 1
). См. stackoverflow.com/questions/5828275/… – Chris Martin 29 August 2015 в 06:13document.body.scrollHeight
равноdocument.body.offsetHeight
в моем экземпляре (Chrome) – Evan de la Cruz 29 September 2016 в 18:20