【问题标题】:JQuery: infinite loop because $(document).height() hasn''t been updatedJQuery:无限循环,因为 $(document).height() 尚未更新
【发布时间】:2014-04-06 06:40:50
【问题描述】:

我正在尝试在我的主页上实现无限滚动。但是,以下脚本将导致无限循环,因为 $(document).height() 永远不会改变。你能帮助我吗?我知道这是由 css 引起的,但我找不到解决方案。我尝试将代码都放入 $(window).load 和 $(document).ready 但它不起作用。

while( $(document).height() <= $(window).height() ) {
load();//load the data at the bottom of the homepage
}

谢谢

【问题讨论】:

  • 我不认为load 是异步的?
  • 它使用 jquery 函数 $.get 所以我想是的,它是。

标签: jquery height document


【解决方案1】:

看看 jQuery .scrollTop

$(document).height() and $(window).height() 将始终固定不变。

但是,使用$(window).scrollTop(),您可以知道页面向下滚动了多远,因此您可以添加窗口高度来计算您位于页面底部并在该点加载内容。

Here is an example

【讨论】:

  • 问题是我需要调用加载函数,直到所有页面都充满内容。所以在加载之前页面是空的,并且没有滚动可用。
【解决方案2】:

问题是在检查height 之前,您永远不会给load 一个完成的机会。 Javascript 是单线程的,因此您的代码永远不会完成,get 结果永远不会被处理。

您需要做的是只调用一次load,然后在get 的回调中,如果需要再试一次。

这样的事情应该可以工作:

function getMore(){
    if( $(document).height() <= $(window).height() ) {
        load();
    }
}

function load(){
    /* ... */
    $.get(/* ... */, function(){
        // after the first get completes, call getMore again
        getMore();
    });
}

您可能需要调整 if 条件以使其完全符合您的要求,但这将解决无限循环的问题。您可能需要一个包装器div 并将该高度与window 高度进行比较,而不是使用document

【讨论】:

  • 实际上它似乎不起作用,因为我的 div 的 .height() 属性在加载后没有改变。还有其他想法吗?提前致谢
  • 你加载了更多的东西到你的 div 并且它的高度没有改变?这个怎么可能?你的 div 上是否有定义的高度?
  • 对不起,你是对的:高度变化。但是我仍然遇到了 if 条件的问题。 if( $("#id").height()
  • 这可能是在 iframe 中还是什么?你能做一个演示吗?
  • 明天我会的。但是有一个包含 div 元素的普通 html 页面。我只是将一些 html 附加到该 div 中。没有其他的。但是 $(window).height 似乎很小。这是浏览器窗口的高度,不是吗?
猜你喜欢
  • 2014-07-18
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
  • 2013-04-22
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
相关资源
最近更新 更多