javascript - 使用 jQuery 在滚动 div 的顶部和底部查找 DOM 元素

标签 javascript jquery dom scroll

我有一个包含列表项的滚动 div。我定义了这个样板滚动事件

$("#scrollingDiv").scroll(function(e) {

});

在这个滚动事件函数中,我如何找出哪些元素位于当前可见区域的顶部和底部?

最佳答案

您可以尝试计算列表项相对于滚动条的位置 <div>然后扫描位置以查看哪些与 scrollTop 匹配的 <div> .

也许是这样的:

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;
    }
});

实时版本(请打开您的控制台):http://jsfiddle.net/ambiguous/yHH7C/

您可能想玩弄 if 的模糊性得到一些合理的东西(1px 可见很难使元素成为最上面的元素)但基本思想应该足够清楚。在#scrollingDiv的高度混合会让你看到哪个<li>在底部。

如果您有很多列表项,那么线性搜索可能不是您想要的,但您应该能够轻松解决这个问题。

关于javascript - 使用 jQuery 在滚动 div 的顶部和底部查找 DOM 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7102748/

相关文章:

javascript - Highcharts - 实时数据和不同时间间隔的选择错误

javascript - 如何在函数外部返回 this 的结果?

javascript - 删除更改 jquery 函数上的特定值

javascript - 按id从表中删除一行

javascript - 在 JS 中处理生产和开发中的路径/链接

javascript - 使用 Axios 等待服务器响应的时间

javascript - 动态速度计 javascript 或 jquery 插件

javascript - 在 Asp.net 中使用 Angular js 更改标签前景色

java - 如何通过 DOM 从以下 XML 中获取第一个子标签

javascript - jQuery 不会在使用 ajax 加载的 div 上执行