【发布时间】:2014-09-06 06:34:22
【问题描述】:
我需要检索可滚动区域内 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);
}
}
});
【问题讨论】:
-
我会研究 vh 单位。 1vh = 视口高度的 1/100。您可能会找到解决方案。找到视口的高度、元素的高度、元素的位置和滚动位置,并据此计算。
-
假设内部 DIV 上有边距,周围都说“10px”。我会检测滚动高度以查看它是否已通过“10”,然后我将获取父元素的高度,然后根据它的滚动高度减去它。
-
如果一切都失败了,我刚刚遇到了这个脚本,它看起来可以满足您的需要:larsjung.de/fracs
标签: javascript jquery height visible