0

我想要这个小按钮,当你点击它时,会添加一个新的表格行,并使用 jQuery 平滑滚动到新添加的行。

我在这里创建了一个示例http://jsfiddle.net/2EBNH/

请注意,这是我的代码的简化版本。真正的允许将行添加到表中的任何位置(不必在最后一行),所以不要简单地告诉我我总是可以滚动到底部。

但即使只是滚动到底部,代码也不起作用。它适用于我假设的前 10 行,但如果添加了更多行,位置/偏移量(我都尝试过)似乎不正确。

要对其进行测试,只需添加超过 15 行,然后您就会看到结果。

我注意到,如果每次单击按钮后都将滚动条移到顶部,它似乎会以某种方式工作。

谢谢

4

1 回答 1

2

这不起作用的原因如下:

position() 方法返回到窗口顶部的相对距离。由于您限制了 div 的大小,因此到窗口顶部的距离不一定是您想要测量的距离,但您希望根据它相对于包含它的 div 的偏移量来测量它。

换句话说:当滚动在顶部并且您添加一个新元素(到底部)时,窗口的偏移量/位置与您要滚动的像素量相同,因此它可以工作。但是,如果你已经滚动到底部,元素到窗口顶部的距离刚好在 100px 左右(div 的高度),所以它会滚动到 100px,这意味着如果滚动距离大于那,它实际上会上升。

您可能有兴趣检查ScrollTo jQuery 插件

var rownum = 1;
$('input').click(function () {
    $('table').append('<tr id=row-' + rownum + '><td>' + rownum + ': row</td></tr>');
    $('#row-' + rownum).ScrollTo({
        duration: 400,
        easing: 'linear'
    });
    rownum++;
});​

这是您使用插件的小提琴

这是一个不使用插件的解决方案(这里是 jsfiddle):

var rownum = 1;
$('input').click(function () {
    $('table').append('<tr id=row-' + rownum + '><td>' + rownum + ': row</td></tr>');
    var $row = $('#row-' + rownum);
    var topOffset = $row.parent().parent().parent().scrollTop() + $row.position().top;
    $('div').animate({scrollTop: topOffset + "px"}, 400);
    rownum++;
});​
于 2012-10-05T06:37:59.933 回答