这不起作用的原因如下:
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++;
});