Мне нужно получить видимую высоту div в пределах прокручиваемой области. Я считаю себя довольно приличным с jQuery, но это полностью отбрасывает меня.
Скажем, у меня есть красный div в черной обертке:
На графике выше функция jQuery вернет 248, видимую часть div.
Как только пользователь прокручивает верхнюю часть div, как и в приведенном выше графике, он сообщает 296.
Теперь, как только пользователь прокрутит прокрутку div, он снова сообщит об этом 248.
Очевидно, что мои номера не будут такими же четкими и ясными, как в этой демонстрации, или я бы просто написал код для этих чисел.
У меня есть немного теории:
- Получить высоту окна
- Получить высоту div
- Получить начальное смещение div из верхней части окна
- Получить смещение, когда пользователь прокручивает.
- Если смещение положительное, это означает, что верхняя часть div все еще видна.
- Если он отрицательный, верхняя часть div затмевается окном. На этом этапе div может либо занимать всю высоту окна, либо нижняя часть div может показывать
- Если нижняя часть div отображается, найдите промежуток между ним и нижней частью окна.
Это кажется довольно простым, но я просто не могу обернуть вокруг него голову. Завтра утром я сделаю очередной треск; Я просто подумал, что некоторые из вас, гениев, могут помочь.
Спасибо!
ОБНОВЛЕНИЕ: Я понял это самостоятельно, но похоже, что один из ответов ниже более изящный, поэтому я буду использовать это вместо этого. Для любопытных, вот что я придумал:
$(document).ready(function() {
var windowHeight = $(window).height();
var overviewHeight = $("#overview").height();
var overviewStaticTop = $("#overview").offset().top;
var overviewScrollTop = overviewStaticTop - $(window).scrollTop();
var overviewStaticBottom = overviewStaticTop + $("#overview").height();
var overviewScrollBottom = windowHeight - (overviewStaticBottom - $(window).scrollTop());
var visibleArea;
if ((overviewHeight + overviewScrollTop) < windowHeight) {
// alert("bottom is showing!");
visibleArea = windowHeight - overviewScrollBottom;
// alert(visibleArea);
} else {
if (overviewScrollTop < 0) {
// alert("is full height");
visibleArea = windowHeight;
// alert(visibleArea);
} else {
// alert("top is showing");
visibleArea = windowHeight - overviewScrollTop;
// alert(visibleArea);
}
}
});