Javascript AngularJS无限滚动(ng重复)-从DOM中删除顶部元素

Javascript AngularJS无限滚动(ng重复)-从DOM中删除顶部元素,javascript,angularjs,angularjs-ng-repeat,infinite-scroll,Javascript,Angularjs,Angularjs Ng Repeat,Infinite Scroll,我有一个ng repeat,它加载了数千条记录,其复杂度可能在100px到1200px之间。不用说,这场演出很受欢迎 模块在大多数情况下都可以正常工作,直到遇到一个边缘情况,在这个边缘情况下,您已经向下滚动到接近底部,并且大多数元素已经加载到DOM中,这让我回到了原点 这对于我的情况来说是完美的,但我还没有弄清楚如何计算下面每个元素的高度,因为它们不是固定的 这让我回到无限滚动。 我假设,如果将顶部元素(视口上方)替换为计算高度等于其总高度总和的空DIV,则性能不会有问题。而向上滚动将使它们返回

我有一个ng repeat,它加载了数千条记录,其复杂度可能在100px到1200px之间。不用说,这场演出很受欢迎

模块在大多数情况下都可以正常工作,直到遇到一个边缘情况,在这个边缘情况下,您已经向下滚动到接近底部,并且大多数元素已经加载到DOM中,这让我回到了原点

这对于我的情况来说是完美的,但我还没有弄清楚如何计算下面每个元素的高度,因为它们不是固定的

这让我回到无限滚动。 我假设,如果将顶部元素(视口上方)替换为计算高度等于其总高度总和的空DIV,则性能不会有问题。而向上滚动将使它们返回dom并减去空DIV的高度


以前有人解决过这个问题吗?有什么建议吗?代码片段会很棒。

ng repeat由于绑定相关的开销,在长列表中的性能会急剧下降。我特别喜欢的一个注重性能的库是,它方便地具有可变的行高度。你可以看看它是否适合你的目的

如果没有任何东西能够满足您的需求,那么您可以始终滚动您自己的指令并自己处理DOM操作,就像下面我编写的代码片段一样。它并没有涵盖您提到的所有内容,但它包括无限滚动和删除旧元素,将它们的高度替换为空的
,而不使用ng repeat

angular.module('SuperList',[])
.controller('mainCtrl',['$scope','$compile',
函数($scope$compile){
//幻数
var itemsPerLoad=4;
var阈值px=1200;
var removeThresholdPx=1600;
//控制指令的选项很酷
$scope.listOptions={
项目:[],
渲染器:渲染器,
阈值:thresholdPx,
removeThreshold:removeThresholdPx,
loadFn:loadNewItems
};
//此函数为数据集中的每个项创建一个div
//它被指令调用
函数渲染器(项目){
var itemElem=angular.element('prevHeight+options.removeThreshold){
log(“删除以前的元素”);
prevElems.remove();
css('height',prevHeight+'px');
//将下一个元素分阶段移除
prevElems=nextems;
prevHeight=nextHeight;
}
}
}
};
});
。项目列表{
边框:1px纯绿色;
宽度:600px;
高度:300px;
溢出:自动;
}
.项目列表>div{
边框:1px纯蓝色;
}
.item list>。空白{
背景:#aaffaa;
}


如果没有任何例子,很难得到帮助。你能通过codepen/复制一个模拟案例吗?我自己也在研究同样的虚拟滚动技术,但从未真正实现过,因为这将超出工程设计。我还有不同高度的项目,所以现有的插件需要修改。如果我们达到这样的程度性能会受到影响,我需要实现虚拟滚动,我肯定会仔细查看上述指令+可能会引入额外功能,如在顶部和底部保留1.5页的元素(人们可以点击主键和结束键)和当前视图项。它们之间是空的高度调整虚拟容器。签出与重复演示页面,它有一个使用可变大小元素的演示。如果向后滚动,您将如何解决/添加回项目?