【问题标题】:Problem with jQuery's scrollTojQuery的scrollTo问题
【发布时间】:2011-06-27 17:54:49
【问题描述】:

我有一个脚本执行一项类似于常规聊天的任务。每当我加载新消息时,我都会像这样填充一个 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 的父级),所以我真的很震惊......

提前致谢

【问题讨论】:

  • 我能问一下你的代码行中的第二个参数是什么吗? $("div.conversation:last", itemBox).offset(); 中的 itemBox 是什么?我不知道你可以在选择时将 2 个参数传递给 jquery..
  • 第二个参数是函数的上下文。您可以将第二个参数传递给 jQuery,它只会在提供的上下文中查找您的搜索,如果没有提供上下文,则整个窗口就是上下文...
  • 非常感谢。我不知道它存在。

标签: jquery scroll offset


【解决方案1】:

如果可以满足您的需求,请尝试使用 .position() 而不是 .offset()

http://api.jquery.com/position/

我遇到了一个类似的问题,即使用 jQuery 计算错误的偏移量

【讨论】:

  • 问题有所改善,在 IE 上运行得更好,但仍然无法跟踪 FF 上的对话(使用 FF4 进行测试)
【解决方案2】:

您可以尝试使用ViewPort 吗?

【讨论】:

    【解决方案3】:

    好的,

    我不太喜欢做这整个“回答我的问题”的事情,但我不太喜欢留下一个悬而未决的问题。 position 函数在一些主要浏览器的 jQuery 上确实有效,但我还没有弄清楚为什么.. 它在 FFx 4 中消失了,此时我必须计算框中所有 div 的高度,就像这样:

    var itemBox = $("#conversation5");
    var loader = $("div.conversation", itemBox);
    var sum = 0;
    
    for (var i = 0; i < loader.length; i++)
       sum += $(loader[i]).innerHeight();
    
    itemBox.scrollTop(sum);
    

    它在所有浏览器上都能完美运行,诚然,这不是最漂亮的解决方案,但仍然可以。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多