2012-06-20 331 views
3

我有一个包含消息列表的div(这是一个聊天室应用程序)。由于每条消息都添加到列表的底部,我想我想让div滚动到页面的底部。这是有道理的,对吗?所以 - 问题1:我如何让div滚动到底部?jQuery - 滚动div与溢出-y:滚动;

现在,下一个问题是关于可用性的一点。如果用户滚动阅读之前发布的内容,该怎么办?然后突然有人发布了一条新消息?这意味着jQuery将再次向下滚动。这可能会让用户非常恼火。处理这个问题的好方法是什么?如果在添加新消息之前滚动条一直向下滚动,它是否应该向下滚动?如果是这样,如何在jQuery中做到这一点?还是有更可用的解决方案?

回答

2

您可以通过window.pageYOffset获得滚动条的位置,然后使用window.scrollTo(0, y)滚动到某个位置。

或者你甚至可以使用jQuery中的$('#mydiv').scrollTop(newmsg_top)向下滚动到新消息。

其中var newmsg_top = parseInt($('#mydiv li:last').offset().top);

这里#mydiv与您的所有邮件的股利。
so #mydiv li:last指向最后一条消息。
offset()对于返回元素的当前位置到文档中,你可以通过.top

如果你想相对于母公司的相对位置,而不是你可以去拿到榜首的位置position()

编辑:有一个jsfiddle在这里工作here。请看一下。 注意:你下去只有当您正在查看的最后一个元素(你的可用性问题的解决)

+0

对不起,我不知道“新消息的最大偏移”是什么或如何得到它。 – StackOverflowNewbie

+0

我编辑了一下,看看你是否可以得到它的工作..否则,我会尝试输入整个代码块:) – tarashish

+0

好吧,我得到了如何使用'scrollTop'。可用性问题呢?你不认为这会是讨厌的,如果它滚动到底部时滚动阅读的东西? – StackOverflowNewbie

1

//这是将滚动到年底,后追加

$("#mydiv").append("My data"); 
var newmsg_top = parseInt($('#mydiv')[0].scrollHeight); 
$('#mydiv').scrollTop(newmsg_top);