我正在使用触摸事件来处理包含大约350行的表格。行数是可变的,因为它们是从Google电子表格中提取的。该表连续自动滚动,这意味着当行在顶部或底部滚动时,我必须根据具体情况再次追加或添加它。
用户可以触摸屏幕向上或向下滑动表格(请注意,我不是在谈论移动设备,而是触摸屏显示器)。当我向下滑动时,我已经为 touchmove 事件提供了一个实现,尽管向上滑动会类似:
function handleMove(event) {
var touch, newY, delta,
$firstItem = $(".item:first"),
$lastItem = $(".item:last");
if (!isDown) {
return;
}
if (event.originalEvent.targetTouches.length == 1) {
touch = event.originalEvent.targetTouches[0];
newY = touch.clientY;
}
delta = lastY - newY;
if (delta < 0) { //Swiping down
//Move last row from the end of the table to the beginning if first row is fully visible.
if (($firstItem.position().top + $firstItem.outerHeight(true)) >= $page.position().top) {
$page.css("margin-top", parseInt($page.css("margin-top")) - $lastItem.outerHeight(true) + "px").prepend($lastItem);
}
$page.css("margin-top", parseInt($page.css("margin-top")) - delta + "px");
}
lastY = newY;
}
问题是表中的行越多,代码变得越迟钝,从而将行从底部移到顶部并调整边距,导致抖动滑动。
我猜这是一项昂贵的操作。我阅读了浏览器重排,但我没有看到我可以对我的代码做出很多优化。即使尝试引入 DocumentFragment 也无济于事。
关于我可以尝试的事情的任何想法?或者我将不得不忍受这个?
THX。