将所有HTML元素滚动到视图中
Get all HTML elements scrolled into view
我在HTML中有一个可滚动的表,它经常更新(大约每秒一次),可以包含1000行以上。显然,每次更新都替换整个表是不合理的,所以我想只替换当前可见的表行。
我的第一次尝试是检查遍历所有行并检查它们的偏移量;这是有效的,但是速度太慢了。
我现在要做的是使用document.elementFromPoint()
来找到<tbody>
上面的最上面的元素,这通常是一个<td>
元素,从那里我可以得到它包含<tr>
。除了表本身被另一个元素遮蔽(例如浮动灯箱)的情况外,这几乎是可行的。
我目前正在寻找第三种解决方案,或者一种方法来获得特定点下的所有元素,而不仅仅是最上面的一个。如果有人知道如何实现这两个目标,我将不胜感激。
所以我在考虑这个,然后想到了这个
http://jsfiddle.net/RKzRE/7/不是监视所有1000行,而是监视其中的一个子集。在页面加载时缓存滚动屏以提高效率。那么,如果在显示区域上方或下方更新几行又会怎样呢?你可以在粒度和更新速度之间找到一个合适的平衡点。
我只实现了向下滚动,并硬编码了要更新的行数。但我想细节很容易弄清楚。
//create an object to hold a list of row top locations
var rowmarkers = new Object;
//gather all rows and store their top location
$('tr').each(function(index) {
//create markers for every ten rows
if (index % 10 == 0) {
$(this).addClass('marker');
rowmarkers[$(this).prop('id')] = $(this).offset().top;
}
});
//track whether user scrolls up or down
var prevScrollTop = $(document).scrollTop();
//monitor scroll event
$(document).scroll(function() {
var currentScrollTop = $(this).scrollTop();
if (currentScrollTop > prevScrollTop) {
downScroll(currentScrollTop);
} else {
//up
}
prevScrollTop = currentScrollTop;
});
function downScroll(scrollTop) {
//find the first row that is visible on screen
for (var row in rowmarkers) {
if (rowmarkers[row] > scrollTop) {
//all rows after this can be updated
var updaterow = $('#' + row).prevAll('.marker:first');
if (!updaterow.length) { updaterow = $('.marker:first'); }
//hardcoded # of rows to update
for (var i = 0; i < 20; i++) {
console.log($(updaterow).prop('id'));
updaterow = updaterow.next('tr');
updaterow.not('.marker').addClass('updaterow');
}
return;
}
}
}
相关文章:
- 滚动所有嵌套的滚动条,使HTML元素进入视图
- 取消选择滚动启动时的所有列表视图项目
- 列表视图在Android上滚动断断续续且缓慢
- 如何在ng视图中进行页面渲染后的平滑滚动
- kenodui树视图滚动到节点问题
- 页面滚动时加载角度视图和控制器太慢
- 在jquery中滚动动态列表视图
- 如何计算另一个元素上滚动速度的乘数,使它们同时到达终点(视图顶部)
- iOS jquery滚动视图插件不会在iframe上滚动y
- 用Javascript将焦点设置在select元素上会将第一个项目滚动到视图之外
- 如何在按下next时自动将滚动视图设置为页面顶部
- 视图中的滚动事件未触发(主干.js)
- 如何为模式窗口中呈现的部分视图添加滚动条
- 自动滚动到Appcelerator中的视图末尾
- asp.net 网格视图在用户控件中的网格视图时滚动到视图
- jQuery 航点在元素滚动到视图中时添加类
- 创建一个滚动条一个ext js数据视图
- Div 使用滚动视图插件进行整理
- 钛 - 安卓:滚动视图滚动位置问题
- 数据视图滚动问题sencha触摸