<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.main{
width: 1500px;
overflow:auto;
height:600px; /* 设置固定高度 */
}
td {
/* 设置td,th宽度高度 */
border:1px solid gray;
width:100px;
height:30px;
}
table {
table-layout: fixed;
width: 200px; /* 固定宽度 */
}
.frozenRow{
position:sticky;
z-index:1;
background: #ccc;
}
.frozenColumn{
position:sticky;
z-index:1;
background: #f00;
}
.frozenColumnRow
{
z-index:2;
background-color:#f00;
}
</style>
</head>
<body>
<div class="main">
<table cellspacing="0" >
<tbody style="position:relative;">
<tr>
<td style="width: 100px;">序号</td>
<td style="width: 100px;">水果</td>
<td style="width: 200px;">内容</td>
<td style="width: 300px;">内容</td>
<td>内容</td>
<td>内容</td>
<td>内容</td>
<td style="width: 500px;">内容</td>
<td style="width: 300px;">内容</td>
<td style="width: 300px;">内容</td>
</tr>
<tr>
<td style="width: 100px;">序号</td>
<td style="width: 100px;">水果</td>
<td style="width: 200px;">内容</td>
<td style="width: 300px;">内容</td>
<td>内容</td>
<td>内容</td>
<td>内容</td>
<td style="width: 500px;">内容</td>
<td style="width: 300px;">内容</td>
<td style="width: 300px;">内容</td>
</tr>
<tr>
<td>1</td>
<td>苹果</td>
<td>1111111</td>
<td>1111111</td>
<td>1111111</td>
<td>1111111</td>
<td>1111111</td>
<td>1111111</td>
<td>1111111</td>
<td>1111111</td>
</tr>
<tr>
<td>2</td>
<td>苹果</td>
<td>1111111</td>
<td>1111111</td>
<td>1111111</td>
<td>1111111</td>
<td>1111111</td>
</tr>
<tr>
<td>3</td>
<td>苹果</td>
<td>1111111</td>
</tr>
<tr>
<td>4</td>
<td>苹果</td>
<td>1111111</td>
<td>苹果</td>
<td>1111111</td>
<td>1111111</td>
<td>1111111</td>
<td>1111111</td>
<td>1111111</td>
</tr>
<tr>
<td>5</td>
<td>苹果</td>
<td>1111111</td>
</tr>
<tr>
<td>6</td>
<td>苹果</td>
<td>1111111</td>
</tr>
<tr>
<td>7</td>
<td>苹果</td>
<td>1111111</td>
<td>苹果</td>
<td>1111111</td>
<td>1111111</td>
<td>1111111</td>
<td>1111111</td>
<td>1111111</td>
<td>1111111</td>
</tr>
<tr>
<td>8</td>
<td>苹果</td>
<td>1111111</td>
</tr>
<tr>
<td>9</td>
<td>苹果</td>
<td>1111111</td>
<td>苹果</td>
<td>1111111</td>
<td>1111111</td>
<td>1111111</td>
<td>1111111</td>
<td>1111111</td>
<td>1111111</td>
</tr>
<tr>
<td>10</td>
<td>苹果</td>
<td>1111111</td>
</tr>
<tr>
<td>11</td>
<td>苹果</td>
<td>1111111</td>
</tr>
<tr>
<td>12</td>
<td>苹果</td>
<td>1111111</td>
</tr>
<tr>
<td>13</td>
<td>苹果</td>
<td>1111111</td>
</tr>
<tr>
<td>14</td>
<td>苹果</td>
<td>1111111</td>
</tr>
<tr>
<td>15</td>
<td>苹果</td>
<td>1111111</td>
</tr>
<tr>
<td>14</td>
<td>苹果</td>
<td>1111111</td>
</tr>
<tr>
<td>15</td>
<td>苹果</td>
<td>1111111</td>
</tr>
<tr>
<td>14</td>
<td>苹果</td>
<td>1111111</td>
</tr>
<tr>
<td>15</td>
<td>苹果</td>
<td>1111111</td>
</tr>
<tr>
<td>14</td>
<td>苹果</td>
<td>1111111</td>
</tr>
<tr>
<td>15</td>
<td>苹果</td>
<td>1111111</td>
</tr> <tr>
<td>14</td>
<td>苹果</td>
<td>1111111</td>
</tr>
<tr>
<td>15</td>
<td>苹果</td>
<td>1111111</td>
</tr>
<tr>
<td>14</td>
<td>苹果</td>
<td>1111111</td>
</tr>
<tr>
<td>15</td>
<td>苹果</td>
<td>1111111</td>
</tr>
</tbody>
</table>
</div>
</body>
<script>
//列冻结
function frozenColumn(column)
{
let tdLeft = 0;
for(let i= 1 ; i<= column ; i++){
let currentTds = document.querySelectorAll(`td:nth-child(${i})`);
currentTds.forEach((item)=> {
item.classList.add('frozenRow')
})
let frozenRow = currentTds[0];
currentTds.forEach((item)=> {
item.style.left = `${tdLeft}px`;
})
tdLeft+= frozenRow.offsetWidth;
frozenCrossChild();
}
}
//行冻结
function frozenRow(row)
{
let tdTop = 0;
for(let i= 1 ; i<= row ; i++){
let currentTds = document.querySelectorAll(`tr:nth-child(${i}) td`);
currentTds .forEach((item)=> {
item.classList.add('frozenColumn')
})
let frozenRow = currentTds[0];
currentTds.forEach((item)=> {
item.style.top = `${tdTop}px`;
})
tdTop+= frozenRow.offsetHeight;
}
frozenCrossChild();
}
//单独处理交叉元素
function frozenCrossChild()
{
let frozenColumnRow = document.querySelectorAll('.frozenColumn.frozenRow');
frozenColumnRow.forEach((item)=> {
item.classList.add('frozenColumnRow')
})
}
frozenColumn(2); //从1到2列 全部固定
frozenRow(5); //从1-5行 全部固定
</script>
</html>
实现table表格固定顶部标题栏和左侧标题栏。
如图:
第1-5行全部固定,第1-2列全部固定