如何使用jquery滚动到新添加的列表元素

时间:2013-07-19 13:47:25

标签: javascript jquery

我正在追加一个新的列表项并尝试将其滚动到视图中。

这是我的HTML:

<div class="slim-scrollbar">
  <ul class="chats">
    <li class="out">dynamic text with variable lengths</li>
    <li class="in">dynamic text with variable lengths</li>
    <li class="in">dynamic text with variable lengths</li>
  </ul>
</div>

我当前的jquery将一个项目附加到列表中:

var direction='out';

$('.chats').append('<li class="'+direction+'">'+textVar+'</li>');   

我的jquery尝试:

    $(".chats").animate({
        scrollTop: ???
    }, 1000);

如何将新列表元素滚动到视图中?

5 个答案:

答案 0 :(得分:4)

要使用您的代码,这应该有效:

$('body,html').animate({
    scrollTop: $('.chats li:last-child').offset().top + 'px'
}, 1000);

答案 1 :(得分:0)

第1步:确保您已安装scrollTo() plugin

步骤2:将附加对象保存在临时变量中,然后滚动主体(或父div,如果在可滚动的div中)。

var newelem = $('<li class="'+direction+'">'+textVar+'</li>');
$('.chats').append(newelem);
$('body').scrollTo(newelem);

答案 2 :(得分:0)

如果你真的需要使用jQuery动画,这可能不是你的选择,但是,你也可以给你的列表一个id,然后使用本机功能让用户获得新添加的内容。

<ul id="new-stuff" class="chats">

//Append the element and all that good stuff.

location.hash = '#new-stuff';

答案 3 :(得分:0)

我建议采用更清洁的解决方案:

var direction = 'out',
    lastLi = $("<li/>", {
        class: direction,
        text: textVar
    }).appendTo('.cheats');
$(document).animate({
    scrollTop: lastLi.offset().top + 'px'
}, 1000);

答案 4 :(得分:0)

假设你的列表位于一个有一定高度的包装div中。

<div id="chatsWrapper" style="height: 200px; overflow:auto;">
<ul class="chats">
  <li class="out">dynamic text with variable lengths</li>
  <li class="in">dynamic text with variable lengths</li>
  <li class="in">dynamic text with variable lengths</li>
</ul>
</div>

$('.chats').append('<li class="'+direction+'">'+textVar+'</li>'); 

只需将包装器div设置为任意高的像素值:

$('#chatsWrapper').animate({ scrollTop: 10000 }, 'normal');