Этого можно достичь с помощью преобразования свойства стиля.Все, что вам нужно сделать, это обернуть вашу таблицу в некоторый div с фиксированной высотой и переполнением, установленным на auto, например:
.tableWrapper {
overflow: auto;
height: calc( 100% - 10rem );
}
И затем вы можете присоединить к нему обработчик onscroll, здесь у вас есть метод, который находиттаблица обернута <div class="tableWrapper"></div>
:
fixTables () {
document.querySelectorAll('.tableWrapper').forEach((tableWrapper) => {
tableWrapper.addEventListener('scroll', () => {
var translate = 'translate(0,' + tableWrapper.scrollTop + 'px)'
tableWrapper.querySelector('thead').style.transform = translate
})
})
}
И вот рабочий пример этого в действии (я использовал bootstrap, чтобы сделать его красивее): fiddle
Длядля тех, кто также хочет поддерживать IE и Edge, вот фрагмент:
fixTables () {
const tableWrappers = document.querySelectorAll('.tableWrapper')
for (let i = 0, len = tableWrappers.length; i < len; i++) {
tableWrappers[i].addEventListener('scroll', () => {
const translate = 'translate(0,' + tableWrappers[i].scrollTop + 'px)'
const headers = tableWrappers[i].querySelectorAll('thead th')
for (let i = 0, len = headers.length; i < len; i++) {
headers[i].style.transform = translate
}
})
}
}
В IE и Edge прокрутка немного запаздывает ... но работает
Вот ответ, которыйпомогает мне узнать это: ответ