我正在使用触摸事件来处理滑动包含大约 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无济于事。
关于我可以尝试的事情有什么想法吗?或者我将不得不忍受这个?
谢谢。