#javascript #jquery #sticky
#javascript #jquery #липкий
Вопрос:
Я работаю над липким заголовком для таблиц, которые размещаются в середине и ближе к низу страницы. У меня это работает, по большей части, но я не могу понять, как правильно расположить заголовок.
Я пробовал фиксированную позицию, но у нее проблема с прокруткой вне поля, абсолютная путаница с шириной заголовков, а sticky, похоже, вставляет заголовок в таблицу и нарушает форматирование.
Есть идеи?
function stickyTableHead(tableID) {
var $tmain = $(tableID);
var $parent = $(tableID).parent();
var pos = $parent.offset().top $tmain.find(">thead").height();
var $tScroll = $tmain.children("thead")
.clone()
.wrapAll('<table id="tScroll" />')
.parent()
.addClass($(tableID).attr("class"))
.css("position", "sticky")
.css("top", 0)
.css("display", "none")
.prependTo($tmain);
$($parent).scroll(function() {
var dataScroll = $tScroll.data("scroll");
dataScroll = dataScroll || false;
if (jQuery(this).scrollTop() >= $tmain.find(">thead").height()) {
if (!dataScroll) {
$tScroll
.data("scroll", true)
.show()
.find("th").each(function() {
$(this).width($tmain.find(">thead>tr>th").eq($(this).index()).width());
});
}
} else {
if (dataScroll) {
$tScroll
.data("scroll", false)
.hide();
}
}
});
}
$(document).ready(function() {
stickyTableHead('#transactionT');
});
Например, JsFiddle, потому что он слишком длинный для текстового редактора здесь
https://jsfiddle.net/zazvorniki/7g245fr6/54 /
Комментарии:
1. Я создавал что-то подобное, и способ, которым я это создал, состоял из двух таблиц, одной для заголовка и одной для таблицы, полоса прокрутки была на контейнере, а заголовок был липким. Была одна проблема с этим решением, если ячейки имели не фиксированный размер, в моем коде мне нужно было получить размер каждого столбца в таблице, а заголовок добавить, применить больший размер как к заголовку, так и к ячейкам таблицы, чтобы они были одинаковой ширины, и нужно пересчитать размер при изменении размера окна (где я сначала удалил стиль встроенной ширины, чтобы изменить их размер, а затем снова установил ширину).
2. @jcubic, это интересное решение. К сожалению, я не могу этого сделать в этой среде. Таблицы создаются динамически, и у меня нет к этому доступа. Я могу обрабатывать их только постфактум в браузере.
3. Вы применяете jQuery к таблице, чтобы вы могли модифицировать ее с помощью jQuery. Вот как я это делал, также в моем случае таблица была сгенерирована в R shiny framework и динамически обновлялась. Решением, которое я использовал, был MutationObserver, который запускался при обновлении таблицы и запускал код jQuery, который исправлял таблицу. удаляем первую строку и помещаем ее в отдельную таблицу. Точно так же, как это делает любой другой плагин для работы с таблицами jQuery.
4. @jcubic Однако в эти таблицы встроена другая логика, такая как сортировка, которая зависит от заголовков, являющихся частью таблицы. Итак, хотя теоретически я мог бы в этом случае, это не совсем жизнеспособное решение.
5. Я не думаю, что возможно иметь липкий заголовок с одной таблицей только с помощью CSS, но я могу ошибаться. Итак, если вам нужно иметь сортировку или другую функцию, которая присутствует в исходной таблице, вам нужно будет воссоздать эту функцию в вашей собственной таблице или заставить ее работать с исправленной таблицей. Например, скрыть первую строку вместо того, чтобы удалять ее при нажатии на заголовок sticky, вы запускаете щелчок по ячейке скрытой строки.