Ниже приведен рабочий код с пояснениями, которые можно использовать для точной настройки вашего решения.
Основная идея заключается в том, что вы оборачиваете содержимое столбцов, которые вы хотите зафиксировать, внутри элементов span
, которыеВы исправляете в левой части экрана (используя CSS) и задаете им ширину, равную их содержанию (в моем коде я использовал только один столбец).
var cellWidth=$('th:first-child').width();
$('th:first-child, td:first-child').each(function() {
$(this).wrapInner('<span></span>');
$(this).find('span').attr('style', 'width:'+cellWidth+'px;');
})
Вы добавляете margin-left
кТаблица равна общей ширине фиксированных столбцов (которую вы должны будете рассчитать, используя Javascript, если необходимо), чтобы фиксированные столбцы не перекрывали содержимое прокручиваемой ячейки.
$('table').attr('style', 'margin-left:'+cellWidth+'px;');
После этогоИспользуя jQuery, вы можете обнаружить прокрутку тела (или для переполненного контейнера, работает так же) и применить свойство отрицательный transform:translateY
к диапазонам.
$(window).on('scroll', function() {
var scr = -$(this).scrollTop();
console.log(scr);
$('th:first-child span, td:first-child span').css('transform', 'translateY(' + scr + 'px)');
})
Здесьэто рабочая скрипка, надеюсь, это даст вам первоначальный импульс.https://jsfiddle.net/scooterlord/ndxjg1b0/21/