我需要在可滚动区域内检索 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);
}
}
});