在touchmove上将行从底部移到顶部

时间:2012-12-20 17:17:00

标签: javascript jquery

我正在使用触摸事件来处理包含大约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。

0 个答案:

没有答案