我有一个包含列表项的滚动div。我已经定义了这个样板滚动事件
$("#scrollingDiv").scroll(function(e) {
});
在此滚动事件功能的内部,如何确定哪些元素位于当前可见区域的顶部和底部?
答案 0 :(得分:3)
您可以尝试根据滚动<div>
计算列表项的位置,然后扫描位置以查看哪些位置与scrollTop
的{{1}}匹配。< / p>
或许这样的事情:
<div>
实时版(请打开您的控制台):http://jsfiddle.net/ambiguous/yHH7C/
你可能想要使用var base = $('#scrollingDiv').offset().top;
var offs = [ ];
$('li').each(function() {
var $this = $(this);
offs.push({
offset: $this.offset().top - base,
height: $this.height()
});
});
$("#scrollingDiv").scroll(function() {
var y = this.scrollTop;
for(var i = 0; i < offs.length; ++i) {
if(y < offs[i].offset
|| y > offs[i].offset + offs[i].height)
continue;
// Entry i is at the top so do things to it.
return;
}
});
的模糊性来获得合理的效果(1px可见几乎不会使元素成为最重要的元素),但基本的想法应该足够清晰。在if
的高度混合可以让您看到底部有#scrollingDiv
。
如果您有很多列表项,那么线性搜索可能不是您想要的,但您应该能够毫不费力地解决这个问题。