添加LockTableHead()和translate()函数。
注意:为防止JQuery与现有js框架抢夺$标识符,要执行jQuery.noConflict(),。
function LockTableHead(divId, tableId) {
var jq = jQuery.noConflict();
jq("#" + divId).scroll(function () {
var delta = jq("#" + divId).scrollTop();
if (delta > 0) {
translate(jq("#" + tableId +" th"), 0, delta - 2);
}
else {
translate(jq("#" + tableId + " th"), 0, 0);
}
});
}
function translate(element, x, y) {
var translation = "translate(" + x + "px," + y + "px)"
element.css({
"transform": translation,
"-ms-transform": translation,
"-webkit-transform": translation,
"-o-transform": translation,
"-moz-transform": translation
});
}
1.3 修改页面,调用js
在适当的地方添加LockTableHead()函数调用即可。
如下:
<button onclick="LockTableHead('grid','T000000');" name="b1" type="button">button</button>
注意:要提供一个div的id和table的id 。
2.非JQuery方案(纯js)
2.1 思路
受JQuery方案的启发,将它翻译回普通js即可。
2.2 添加js函数
添加LockTableHead()函数。
function LockTableHead(divId, tableId) {
document.getElementById(divId).onscroll = function () {
var delta = document.getElementById(divId).scrollTop;
var t1 = "translate(0px," + delta + "px)";
th_Array = document.getElementById(tableId).getElementsByTagName("th");
for (i = 0; i < th_Array.length; i++) {
th_Array.style["-ms-transform"] = t1;
}
};
}
2.3 修改页面,调用js
同上,在适当的地方添加LockTableHead()函数调用即可。
如下:
<button onclick="LockTableHead('grid','T000000');" name="b1" type="button">button</button>
注意:要提供一个div的id和table的id 。
3.总结
以上两方案实际上都是使用了css3中的translate函数,这就意味着浏览器得支持这个功能是前提条件。
另外,如果页面上只有一个table,也可以通过getElementsByTagName的方式定位table,并用parentNode的方式定位div,这样就不必传递它们的id了。
推荐参考资料:
http://www.mycafei.com/a/study/2012/0909/2.html
关于IE, 下面的方案不支持IE6, IE7, IE8, 只支持IE9, IE10。
因为从IE9开始才支持css3的部分功能,所以,IE6, IE7, IE8就不能用此方案了, 其实IE6, IE7 还用css的expressions不挺好吗?多省事,就一句话的事。
4.附录完整的代码
<HTML>
<HEAD>
<TITLE >fff</TITLE>
<META http-equiv="X-UA-Compatible" content="IE=9" />
<script type="text/javascript">
function LockTableHead(divId, tableId) {
document.getElementById(divId).onscroll = function () {
var delta = document.getElementById(divId).scrollTop;
var t1 = "translate(0px," + delta + "px)";
th_Array = document.getElementById(tableId).getElementsByTagName("th");
for (i = 0; i < th_Array.length; i++) {
th_Array.style["-ms-transform"] = t1;
}
};
}
</script>
</HEAD>
<body onload="LockTableHead('body','your_table')">
<form>
<div id="body" style="border-right: 1px groove; border-top: 1px groove; left: 60px;
overflow: auto; border-left: 1px groove; width: 374px; border-bottom: 1px groove;
position: absolute; top: 159px; height: 308px">
<div style="overflow: visible; width: 370px; position: static; height: 308px">
<table id="your_table">
<thead id="hid" style="background-color: white">
<tr id="tid">
<th style="width: 100px">
col1
</th>
<th style="width: 100px">
col2
</th>
<th style="width: 100px">
col3
</th>
<th style="width: 100px">
col4
</th>
<th style="width: 100px">
col5
</th>
<th style="width: 100px">
col6
</th>
<th style="width: 100px">
col7
</th>
<th style="width: 100px">
col8
</th>
<th style="width: 100px">
col9
</th>
<th style="width: 100px">
col10
</th>
<th style="width: 100px">
col11
</th>
<th style="width: 100px">
col12
</th>
</tr>
</thead>
<tbody style="display: block; overflow: auto">
<tr>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
</tr>
<tr>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
</tr>
<tr>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
</tr>
<tr>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
</tr>
<tr>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
</tr>
<tr>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<tr>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
</tr>
<tr>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
</tr>
<tr>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
</tr>
<tr>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
</tr>
<tr>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
</tr>
<tr>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
</tr>
<tr>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
</tr>
<tr>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
</tr>
<tr>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
</tr>
<tr>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
</tr>
<tr>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
<td>
milk
</td>
<td>
1 quart
</td>
<td>
2 quart
</td>
</tr>
</tbody>
</table>
</div>
</div>
</form>
</body>
</html>