Мне нужно получить видимую высоту 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);
}
}
});