jQuery 的scrollTo 问题
我有一个脚本执行类似于常规聊天的任务。每当我加载新消息时,我都会像这样填充一个 div:
....
<div class="conversation">
<span class="sender">Sender: </span><span>Message sent by sender..</span>
</div>
....
然后,使用 jQuery 我会做这样的事情:
var lastOne = $("div.conversation:last", itemBox).offset();
itemBox.scrollTop(lastOne.top);
当我有一些(〜40条消息)时,它工作正常,但是当列表变得太大时,它开始计算偏移错误。这种情况尤其发生在占用超过 3 行的大消息上。我没有在聊天框内使用任何浮动(所有 div.conversation
的父级),所以我在这里真的很震惊......
提前致谢
I have a script doing a task much like a regular chat. Whenever I load new messages I fill a div like this:
....
<div class="conversation">
<span class="sender">Sender: </span><span>Message sent by sender..</span>
</div>
....
Then, using jQuery I do something like this:
var lastOne = $("div.conversation:last", itemBox).offset();
itemBox.scrollTop(lastOne.top);
When I'm having a few (~40 messages) it works ok, but when the list grows too large, it starts calculating the offset wrong. This happens specially with large messages, taking over 3 lines. I'm not using any float inside the chat box (parent of all div.conversation
), so I'm really shocked here...
Thanks in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您可以使其满足您的需求,请尝试使用
.position()
而不是.offset()
。http://api.jquery.com/position/
我遇到了类似的问题,偏移量错误使用 jQuery 进行计算
Try use
.position()
instead of.offset()
if you can make it work for your needs.http://api.jquery.com/position/
I've had a similiar problem with wrong offset calculations with jQuery
也许您可以尝试使用 ViewPort ?
May be you can try using ViewPort ?
好吧,
我不太喜欢做这整个“回答我的问题”的事情,但我不太喜欢留下一个悬而未决的问题。位置函数确实可以在一些主要浏览器上的 jQuery 上工作,但我还没弄清楚为什么......它在 FFx 4 中消失了,此时我必须计算框中所有 div 的高度,就像这样
:诚然,它可以在所有浏览器上完美运行,这不是最漂亮的解决方案,但仍然可以运行。
Okay,
I'm not much of a fan of doing this whole "answering my question" thing, but I'm less of a fan of leaving an open question. The position function does work on jQuery with some major browsers, but I haven't figured out why.. it dies with FFx 4, at the point I had to calculate the height of all the divs in the box, much like this:
It works flawlessly on all browsers, admitedly, not the prettiest solutions, but works nontheless.