本文介绍如何利用JavaScript的scrollTop和scrollLeft属性,实现网页表格中表头和列头的固定效果,模拟Excel冻结窗格功能。通过控制滚动偏移量,确保用户在浏览长表格时,关键数据列和行始终可见,提升数据查看体验。
JavaScript实现表格固定效果概述
本文通过具体实例,展示了如何使用JavaScript实现网页表格中表头和列头的固定功能。该方案可供开发者参考借鉴。
示例演示了一个HTML表格页面,实现了类似Excel冻结窗格的效果,即固定表头或列头。其核心原理是利用JavaScript中的scrollTop和scrollLeft属性来控制滚动位置。
理解scrollTop与scrollLeft属性
一、理解JavaScript中scrollTop与scrollLeft属性
scrollTop表示元素内容超出元素上边界的那部分高度。例如,若外层容器高度为200px,内部内容高度为300px,则向下滚动时,有100px的内容会隐藏在外层容器的上边界之外,此时scrollTop的值即为这100px。
scrollLeft的含义与scrollTop类似,但指的是元素内容超出元素左边界的那部分宽度。
页面代码与效果示例
二、页面实现示例
以下是实现该效果的具体页面代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>表头列头固定 -- Sara</title>
<style>
body{font-size:12px;}
.t_n{width:30px; heihgt:240px!important; height:242px; background:buttonface; float:left; border-bottom:1px solid #000; border-left:1px solid #000}
.t_n span{display:block; text-align:center; line-height:20px; border:1px solid #000; width:28px; height:20px}
.t_number{border-right:1px solid #000; width:100%; margin-bottom:5px}
.t_number td{border-bottom:1px solid #000; width:30px; height:25px; text-align:center}
.dd{height:200px!important; height:208px; overflow-y:hidden;}
.t_i{width:400px; height:auto; float:left; border-right:1px solid #000; border-top:1px solid #000}
.t_i_h{width:100%; overflow-x:hidden; background:buttonface;}
.ee{width:618px!important; width:620px}
.t_i_h table{width:600px;}
.t_i_h table td{border-right:1px solid #000; border-bottom:1px solid #000; height:20px; text-align:center}
.cc{width:100%; height:220px; border-bottom:1px solid #000; border-right:1px solid #000; background:#fff; overflow:auto;}
.cc table{width:600px; }
.cc table td{height:25px; border-bottom:1px solid #000; border-right:1px solid #000; text-align:center}
</style>
<script>
function aa(){
var a=document.getElementById("cc").scrollTop;
var b=document.getElementById("cc").scrollLeft;
document.getElementById("dd").scrollTop=a;
document.getElementById("hh").scrollLeft=b;
}
</script>
</head>
<body>
<div class="t_n">
<span>序号</span>
<div class="dd" id="dd">
<table cellpadding="0" cellspacing="0" border="0" class="t_number">
<tbody>
<tr>
<td>1</td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>3</td>
</tr>
<tr>
<td>4</td>
</tr>
<tr>
<td>5</td>
</tr>
<tr>
<td>6</td>
</tr>
<tr>
<td>7</td>
</tr>
<tr>
<td>8</td>
</tr>
<tr>
<td>9</td>
</tr>
<tr>
<td>10</td>
</tr>
</tbody>
</table>
</div>
</div>
<!--table-->
<div class="t_i">
<div class="t_i_h" id="hh">
<div class="ee">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td width="10%">标题A</td>
<td width="20%">标题B</td>
<td width="10%">标题C</td>
<td width="20%">标题D</td>
<td width="20%">标题E</td>
<td width="20%">标题F</td>
</tr>
</table>
</div>
</div>
<div class="cc" id="cc" onscroll="aa()">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td width="10%">1</td>
<td width="20%">1</td>
<td width="10%">1</td>
<td width="20%">1</td>
<td width="20%">1</td>
<td width="20%">1</td>
</tr>
<tr>
<td>2</td>
<td>2</td>
<td>2</td>
<td>2</td>
<td>2</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>3</td>
<td>3</td>
<td>3</td>
<td>3</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>4</td>
<td>4</td>
<td>4</td>
<td>4</td>
<td>4</td>
</tr>
<tr>
<td>5</td>
<td>5</td>
<td>5</td>
<td>5</td>
<td>5</td>
<td>5</td>
</tr>
<tr>
<td>6</td>
<td>6</td>
<td>6</td>
<td>6</td>
<td>6</td>
<td>6</td>
</tr>
<tr>
<td>7</td>
<td>7</td>
<td>7</td>
<td>7</td>
<td>7</td>
<td>7</td>
</tr>
<tr>
<td>8</td>
<td>8</td>
<td>8</td>
<td>8</td>
<td>8</td>
<td>8</td>
</tr>
<tr>
<td>9</td>
<td>9</td>
<td>9</td>
<td>9</td>
<td>9</td>
<td>9</td>
</tr>
<tr>
<td>10</td>
<td>10</td>
<td>10</td>
<td>10</td>
<td>10</td>
<td>10</td>
</tr>
</table>
</div>
</div>
</body>
</html>
运行后的效果如下图所示:

如需了解更多JavaScript相关知识,可参考本站专题:《JavaScript操作DOM技巧总结》、《JavaScript表单(form)操作技巧大全》、《JavaScript数组操作技巧总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》。
希望本文所述内容能对读者的JavaScript编程实践有所帮助。