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