HTML表格中的“无限滚动”效果

时间:2008-10-19 16:04:45

标签: javascript datatable yui scroll dhtml

我在网页中显示滚动的数据表。该表有几千个动态行,因此它从服务器加载(通过AJAX)。

用户可以向上和向下滚动,所以我需要的是检测用户何时到达滚动条的末尾(即表格底部的最后一行)请求并显示更多数据。

您可以在Google阅读器中找到此效果,当您向下滚动到给定Feed中的最后一个帖子,google请求并以透明的方式显示新帖子时,但我无法弄清楚他们是如何实现的。

顺便说一下,我现在正在使用YUI Datatable

7 个答案:

答案 0 :(得分:4)

感谢您的回答。这是我的最终工作代码(受Greg和ajaxian.com启发),它使用了一些jQuery函数并与YUI DataTable一起使用。

$(".yui-dt-bd").scroll(load_more);

function load_more() {              
    if ($(this).scrollend()) {
        alert("SCROLL END REACHED !");
        // TODO load more data
    }
}

$.fn.scrollend = function() {
    return this[0].scrollHeight - this[0].scrollTop - this.height() <= 0;
}

我的下一步是实现我自己的YUI Paginator以实现与YUI组件的完全集成:)

答案 1 :(得分:2)

我不熟悉你正在使用的具体元素,但是按顺序  要在全尺寸窗口上实现此功能,您可以执行以下操作:

$wnd.onscroll = function() {
    if (($wnd.height - $wnd.scrollTop) < SOME_MARGIN) then doSomething();
};

其中scrollTop基本上是“滚动了多少像素”。 我假设将这个应用到您正在使用的表中将完成这项工作。

答案 2 :(得分:2)

我刚用Google搜索并找到了这篇文章:Implementing Dynamic Scroll with Ajax, JavaScript, and XML。这看起来像是一个彻底的解释。

答案 3 :(得分:1)

你可以看到它仅适用于here YUI。与上面提出的解决方案之一相反,滚动条连续移动,位置和大小反映可视区域的真实大小和位置,当滚动条到达底部时,它不会加载下一批。仅当整个记录的最后一个位于查看区域的底部时,滚动条才会到达底部。当然,这只有在您知道有多少记录的情况下才有效。

答案 4 :(得分:0)

我今天在Firebug中读取DOM属性时注意到了一个名为scrollY的属性(在DOM选项卡下的Firebug中转到content&gt; scrollY),这似乎是留在窗口上滚动的像素数量。尝试查看是否也为可滚动元素创建了这个。然后你可以使用Yuval的函数来加载新数据。

答案 5 :(得分:0)

伊克。不是无尽滚动的忠实粉丝;它打破了人们对网络运作方式的一些关键假设。请保证您只能在以下条件下实施:

1)你没有用它来代替一个非常好的页面,它将所有内容加载到一个漂亮的长表中,并让用户使用Ctrl-F在页面内搜索Fringe出现的时间。

2)您不打算在每个滚动数据块的底部插入广告。

3)你正在为盲人和浏览网页的人禁用JavaScript提供工作后备(嘿,还有那个漂亮的长桌)。

答案 6 :(得分:0)

如果您正在使用YUI,则表格滚动时会触发tableScrollEvent。将此与dataTable的generateRequest函数结合使用,您可以通过观察tableScrollEvent并在接近数据集末尾时启动请求来实现无限滚动。

YUI文档没有针对此案例的具体示例,但会显示由generateRequest返回的how to handle the data