我在网页中显示滚动数据表。该表有数千个动态行,因此它是从服务器加载的(通过 AJAX)。
用户可以上下滚动,所以我需要检测用户何时到达滚动条的末尾(即表格底部的最后一行),以便请求和显示更多数据。
你可以在谷歌阅读器中找到这种效果,当你向下滚动到给定提要中的最后一篇文章时,谷歌请求并以透明的方式显示新文章,但我不知道它们是如何实现的。
顺便说一句,现在我正在使用YUI 数据表
谢谢您的回答。这是我的最终工作代码(受 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 组件的完整集成:)
我不熟悉您正在使用的特定元素,但为了在全尺寸窗口上实现这一点,您可以执行以下操作:
$wnd.onscroll = function() {
if (($wnd.height - $wnd.scrollTop) < SOME_MARGIN) then doSomething();
};
scrollTop 本质上是“滚动了多少像素”。我假设将其应用于您正在使用的表将完成这项工作。
我刚刚搜索了它并找到了这篇文章:Implementing Dynamic Scroll with Ajax, JavaScript, and XML。它看起来像一个彻底的解释。
你可以看到它只在这里YUI 工作。与上面建议的一种解决方案相比,滚动条连续移动,位置和大小反映了可视区域的真实大小和位置,当滚动条到达底部时它不会加载下一批。只有当整个记录的最后一个位于查看区域的底部时,滚动条才会到达底部。当然,这只有在您知道有多少条记录时才有效。
我今天在阅读 Firebug 中的 DOM 属性时注意到一个属性,称为scrollY
(在 Firebug 中的 DOM 选项卡下转到content
> scrollY
),它似乎是在窗口上滚动的剩余像素数量。试试看这是否也是为可滚动元素创建的。然后就可以使用 Yuval 的函数来加载新数据了。
伊克。不是无限滚动的忠实粉丝;它打破了人们对 Web 如何工作的一些关键假设。请保证您只会在以下条件下实施它:
1) 你并没有用它来代替一个完美的页面,该页面将所有内容加载到一个漂亮的长表中,并让用户使用 Ctrl-F 在页面内搜索 Fringe 出现的时间。
2)您不打算在每个滚动数据块的底部插入广告。
3) 您正在为盲人和禁用 JavaScript 浏览 Web 的人提供一个有效的后备方案(嘿,又是那个漂亮的长桌)。
如果您使用的是 YUI,它有一个tableScrollEvent会在表格滚动时触发。将此与 dataTable 的 generateRequest 函数相结合,您可以通过观察tableScrollEvent并在接近数据集末尾时启动请求来实现无限滚动。
YUI 文档没有针对这种情况的具体示例,但确实向您展示了如何处理generateRequest 返回的数据