Мені потрібно отримати видиму висоту div у прокручуваній області. Я вважаю себе досить пристойним з jQuery, але це мене повністю відкидає.
Скажімо, у мене є червоний div у чорній обгортці:
На графіку вище функція jQuery повертає 248, видиму частину div.
Як тільки користувач прокрутить верхню частину div, як на графіку вище, він повідомить 296.
Тепер, як тільки користувач прокрутив повз div, він знову повідомить про 248.
Очевидно, що мої номери не будуть такими ж послідовними та чіткими, як у цій демонстрації, або я б просто вказав ці цифри.
У мене є трохи теорії:
- Отримати висоту вікна
- Отримати висоту 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);
}
}
});