当您向下滚动包含长表格的页面时,表格的表头通常会滚动消失并变得无用。此代码克隆表格表头,并在您滚动到其下方时将其应用于页面顶部,并在您滚动到表格末尾时消失。
如今,您可能最好 使用position: sticky;
而不是使用 JavaScript,但您需要自行处理浏览器兼容性问题。
function UpdateTableHeaders() {
$("div.divTableWithFloatingHeader").each(function() {
offset = $(this).offset();
scrollTop = $(window).scrollTop();
if ((scrollTop > offset.top) && (scrollTop < offset.top + $(this).height())) {
$(".tableFloatingHeader", this).css("visibility", "visible");
$(".tableFloatingHeader", this).css("top", Math.min(scrollTop - offset.top, $(this).height() - $(".tableFloatingHeader", this).height()) + "px");
}
else {
$(".tableFloatingHeader", this).css("visibility", "hidden");
$(".tableFloatingHeader", this).css("top", "0px");
}
})
}
$(document).ready(function() {
$("table.tableWithFloatingHeader").each(function() {
$(this).wrap("<div class="divTableWithFloatingHeader" style="position:relative"></div>");
$("tr:first", this).before($("tr:first", this).clone());
clonedHeaderRow = $("tr:first", this)
clonedHeaderRow.addClass("tableFloatingHeader");
clonedHeaderRow.css("position", "absolute");
clonedHeaderRow.css("top", "0px");
clonedHeaderRow.css("left", "0px");
clonedHeaderRow.css("visibility", "hidden");
});
UpdateTableHeaders();
$(window).scroll(UpdateTableHeaders);
});
查看 Chris Coyier 的 CodePen 上的示例
旧的 jQuery 技术:持久表头 (@chriscoyier)
在 CodePen 上。
好主意,我认为它需要改进。它有点跳跃。
在 IE7 中不起作用,太糟糕了 :(
这在 IE7 中运行良好。
实际上,它在使用 IE7 标准的 IE7 中不起作用……
(使用 IE9 — 开发者工具 — 浏览器模式:IE7,文档模式:IE7 标准)
它克隆了表头,但没有将其保留在页面上。我仍在寻找解决此问题的方案。
这正是我一直在寻找的,谢谢
Laxman Parmar
如果表格宽度大于其容器并且出现水平滚动条,就会出现问题,这在报表中非常常见。
在这种情况下,克隆的表头应该能够与表格一起水平滚动。到目前为止,我还没有找到解决此问题的合适方案。
这在 iPhone 上有效吗?
我刚刚在 iPhone 上查看了一下,它有点有效,虽然不是 iPhone 的流畅操作,但仍然比我在网上找到的大多数其他人的尝试更接近。
太棒了,这正是我想要的。
如果我有一个固定高度为 200px 的表头,并且内容从 200px 下方开始,我该怎么办?如何修改表格表头的偏移量?
谢谢
这非常有用。
不错..这给我的网站带来了很棒的外观 http://www.wrangle.in
非常感谢 :)
非常好。
有没有办法在带有自动滚动(overflow:auto;)的 div 内保留表头?
谢谢。
这很好,但是当我滚动时,与相应的內容行相比,表头行的每列的宽度发生了变化……有什么想法吗?
遇到了同样的问题,我看看能不能解决…
我为我的网站修改了它
我敢肯定它在边框或其他方面很容易出错,但对我来说它可以工作。
您好,非常感谢您的脚本。它运行完美。
我有一个问题。
在您的脚本中,您克隆了表格表头中的第一个 TR。
如果我有两行,您能告诉我如何使用您的代码吗?
通常,您的脚本只将第一行放入浮动 DIV 中。
提前感谢您的帮助!
Kris
好主意,我认为它需要改进。它有点跳跃。