【发布时间】:2023-03-03 07:14:25
【问题描述】:
我正在根据用户如何滚动以保持它们对齐,以编程方式更新表格标题及其第一列位置。
我遇到的问题是,一旦我的数据集变得足够大,滚动就会变得越来越不稳定/越来越不流畅。
相关代码在小提琴的最底部:
iScroll.on('scroll', function(){
var pos = $('#scroller').position();
$('#pos').text('pos.left=' + pos.left + ' pos.top=' + pos.top);
// code to hold first row and first column
$('#scroller th:nth-child(1)').css({top: (-pos.top), left: (-pos.left), position:'relative'});
$('#scroller th:nth-child(n+1)').css({top: (-pos.top), position:'relative'});
// this seems to be the most expensive operation:
$('#scroller td:nth-child(1)').css({left: (-pos.left), position:'relative'});
});
我知道通过缓存元素等可以更有效地编写它。例如,我尝试将元素保存到数组中并以更“普通”的方式更新它们的位置:
headerElements[i].style.left = left + 'px'; // etc...
无论我以多快的速度进行回调,我仍然对结果不满意。你有什么建议吗?
【问题讨论】:
-
您是否 100% 需要使用工具来创建滚动条?
-
您可以创建一个数组,其中包含您的 html 块。根据当前滚动位置加载数组的每个索引,假设 pos 是前一个位置的正值。这应该做的是加载一大块数据(比如 100 行),并且在到达下一个“检查点”之前不会加载数据。 hth!
标签: javascript jquery iscroll