Фиксированные заголовки таблицы с фиксированным div баннера
Я использовал код из этого SO-вопроса для успешного создания фиксированных заголовков таблиц, однако у меня возникли некоторые проблемы с его адаптацией к моей странице, которые я не могу понять. Я немного новичок в Javascript/jQuery, поэтому, пожалуйста, потерпите меня немного.
Код опирается на событие прокрутки в браузере, чтобы определить, когда THEAD находится вне поля зрения, чтобы он знал, когда клонировать таблицу, ипоместил клонированный заголовок вверху страницы.
Однако моя страница имеет фиксированныйDIV в верхней части страницы, которая содержит панель поиска и т. Д., И когда он присутствует, фиксированный заголовок не работает. Я изо всех сил пытаюсь найти способ обойти это, поскольку мне нужна фиксированная область. Это, наверное, очень просто, но я этого не вижу.
Фрагмент кода выглядит следующим образом:
function moveScroll() {
var scroll = $(window).scrollTop();
var anchor_top = $("#maintable").offset().top;
var anchor_bottom = $("#bottom_anchor").offset().top;
if (scroll > anchor_top && scroll < anchor_bottom) {
clone_table = $("#clone");
if (clone_table.length === 0) {
clone_table = $("#maintable").clone();
clone_table.attr({
id: "clone"
}).css({
position: "fixed",
"pointer-events": "none",
top: 0
}).width($("#maintable").width());
$("#table-container").append(clone_table);
$("#clone").width($("#maintable").width());
$("#clone").css({
border: "none"
});
$("#clone thead").css({
visibility: "true"
});
$("#clone tbody").css({
visibility: "hidden"
});
var footEl = $("#clone tfoot");
if (footEl.length) {
footEl.css({
visibility: "hidden"
});
}
}
} else {
$("#clone").remove();
}
}
$(window).scroll(moveScroll);
Вот JSFiddle с урезанной версией страницы.
Если вы удалите разделы CSS для #topsection
а также #table-container
вы увидите фиксированные заголовки в действии. Когда эти разделы присутствуют, ничего не работает.
Кроме того, у меня есть еще одна проблема. Если я использую border-collapse:collapse
чтобы получить хорошие границы, Firefox не отображает фиксированный заголовок должным образом. Вместо этого он отображает полностью пустую таблицу поверх таблицы. Есть идеи как обойти это?
2 ответа
Я вернулся к этой проблеме после выходных и решил ее. Я не могу поверить, что я не мог видеть это на прошлой неделе! Это доказывает, на что способна свежая пара глаз.
Я подумал, что отвечу здесь, если кому-то еще понравится этот код.
Я изменил одну из переменных, чтобы слушать верхнюю часть основного раздела вместо всего окна:
var scroll = $(window).scrollTop();
Сейчас:
var scroll = $('#table-container').offset().top;
Затем я изменил оператор для вызова функции:
$(window).scroll(moveScroll);
Сейчас:
$('#table-container').scroll(moveScroll);
Наконец, я вручную установил верх фиксированного заголовка на 130 пикселей, чтобы он соответствовал низу верхнего раздела.
Вот скрипка: http://jsfiddle.net/hvRZy/
Я до сих пор не могу решить проблему коллапса границы, поэтому, если у кого-то есть какие-то идеи на этом фронте, это было бы удивительно. Спасибо!
РЕДАКТИРОВАТЬ: мне удалось решить проблему границы с помощью следующих CSS
(также добавлены закругленные углы):
table {
border-collapse: separate;
border-spacing: 0px;
}
table tr th, table tr td {
border-right: 1px solid #000;
border-bottom: 1px solid #000;
padding: 5px;
}
table tr th:first-child, table tr td:first-child {
border-left: 1px solid #000;
}
table tr th {
background: #c0c0c0;
border-top: 1px solid #000;
text-align: center;
}
table tr:first-child th:first-child {
border-top-left-radius: 6px;
}
table tr:first-child th:last-child {
border-top-right-radius: 6px;
}
table tfoot tr:last-child td:first-child {
border-bottom-left-radius: 6px;
}
table tfoot tr:last-child td:last-child {
border-bottom-right-radius: 6px;
}
Последняя скрипка! http://jsfiddle.net/KfxQg/
Вы можете использовать jQuery TH Float Plugin. Если вы хотите сделать table th
чтобы исправить, вы можете использовать это так
$("#maintable").thfloat({
attachment : "#maintable",
noprint : false
});