如何优化查找视口中可见的最顶行

时间:2014-09-26 07:15:42

标签: javascript jquery ajax underscore.js

我想看看我是否可以优化代码,以便在给定时刻检查哪一行位于视口的顶部。此函数在scroll事件上运行,页面动态加载新单元格(每行最多四个)。布局由列表项列表组成,绝对位于网格中(大部分时间为4x4)。

今天的代码(scrollPosition早先是fetcher,类似$(window).scrollTop()):

var topMostRow = _.min(this.container.find("li").toArray(), function(row) {
                var offset = $(row).offset().top,
                    diff = scrollPosition - offset;
                return Math.abs(diff);
            })

正如您可能猜测的那样,需要越来越长的时间来添加更多的单元格

1 个答案:

答案 0 :(得分:1)

很难解释,但我认为你可以在最后一次滚动时存储在最后topMostRow的var中,然后,你可以使用

在循环中找到它
$(lastTopMostRow).next();

$(lastTopMostRow).prev();

关于滚动的指示(向上或向下)

并检查一个比率为正数且下一个为diff

为负数的那个

这样您只会检查几行而不是全部行。