.report-table {
overflow-x: auto;
max-width: 600px;
}
.header-table {
overflow: hidden; /* 隐藏第一列滚动条*/
max-width: 300px;
}
.table-body {
overflow-y: auto;
max-height: 400px;
}
.d-block {
display: block;
}
分为第一列和其他列两个表:
<div class="d-flex">
<table class="table text-center header-table">
<thead class="d-block">
<tr>
<th>第一行第一列</th>
</tr>
</thead>
<!-- 竖表头(固定) -->
<tbody id="tableHeader" class="d-block table-body">
<tr>
<td>第一列第二行</td>
<td>第一列第二行</td>
<td>第一列第三行</td>
<td>……</td>
</tr>
</tbody>
</table>
<div class="report-table">
<table class="table text-center">
<!-- 横表头(固定) -->
<thead class="d-block">
<th>第一行第二列</th>
<th>第一行第二列</th>
<th>第一行第三列</th>
<th>……</th>
</thead>
<!-- 表内容(可拖动) -->
<tbody id="tableContent" class="d-block table-body">
<tr>
<td>第二行第二列</td>
<td>第二行第二列</td>
<td>第二行第三列</td>
<td>……</td>
</tr>
<tr>
<td>第二行第二列</td>
<td>第二行第二列</td>
<td>第二行第三列</td>
<td>……</td>
</tr>
</tbody>
</table>
</div>
</div>
垂直方向同步滚动 & 左右内容height保持一致:
window.onload=function(){
let content = document.getElementById('tableContent')
let header = document.getElementById('tableHeader')
let contentChanged = true
let headerChanged = true
if (content != null && header != null) {
content.onscroll = () => {
if (contentChanged) {
header.scrollTop = content.scrollTop / (content.scrollHeight - content.clientHeight) * (header.scrollHeight - header.clientHeight)
headerChanged = false
} else {
contentChanged = true
}
}
header.onscroll = () => {
if (headerChanged) {
content.scrollTop = header.scrollTop / (header.scrollHeight - header.clientHeight) * (content.scrollHeight - content.clientHeight)
contentChanged = false
} else {
headerChanged = true
}
}
//设置右边cell的height与左边一致,避免左边内容换行导致高度错开
var rowNumber = header.rows.length;
for (var i = 0; i < rowNumber; i++) {
content.rows[i].cells[0].height = header.rows[i].cells[0].offsetHeight;
}
}
参考链接:
js实现两个元素滚动条同步的方法