0

我创建了一个水平的元素列表。该列表具有固定宽度并在溢出时滚动。当一个按钮被点击时,一个新元素被添加到这个列表中,我试图将 ul 元素滚动到这个新创建的 li 元素。

这是我正在使用的 JQuery:

var ul = $('ul')  

$('button').click(function() {
    var li = $('<li></li>');

    ul.append(li);

    ul.stop().animate({
        scrollLeft: li.offset().left
     }, 2000);
});

奇怪的是,如果您开始跟踪变量li.offset().left,前几个元素的值几乎保持相同,并且滚动工作正常,直到li.offset().left小于ul.scrollLeft()最大值。

你可以在这里看到这个:http: //jsfiddle.net/ePrwZ/16/

看起来正在发生的事情是li.offset().left当我需要它相对于父 ul 元素时跟踪相对于文档的位置。但是由于溢出,我不能仅仅减去父母的节日。关于如何计算这个的任何想法?

注意:我想滚动到特定元素而不仅仅是 ul 的末尾。

4

1 回答 1

1

改成:

ul.stop().animate({
    scrollLeft: li.position().left + ul.scrollLeft()
 }, 2000);

您正在寻找 position() 方法,它返回相对位置,而不是偏移量,它返回绝对(更正确 - 相对于文档)位置,并添加当前滚动状态(这会影响位置读取)

于 2013-09-04T12:37:00.137 回答