利用js+css+html实现固定table的列头不动


Posted in Javascript onDecember 08, 2016

话不多说,跟这小编来一起看下吧

1、CSS

<style type="text/css">
  #scroll_head {
    position: absolute;
    display: none;
  }
</style>

2、Javascript

<script type="text/javascript">
  //该函数在上面一个table数据加载完成后调用
  //把表头的宽度设置到会滚动的页头去
  var copyWidth = function () {
    var b = $('#data_tbody').prev().find('tr:last').find('th');
    var c = $('#scroll_head').find('tr:last').find('th');
    for (var i = 0; i < b.length; i++) {
      var newWith = b.eq(i).width();
      if ($.browser.msie) {
        newWith += 1;
      }
      c.eq(i).width(newWith);
    }
  }
  $(function () {
    $(window).scroll(function () {
      if ($('#data_tbody').length > 0) {
        var thead = $('#data_tbody').prev();
        var thOffset = thead.offset();
        var scTop = $(window).scrollTop(); //滚动条相对top的位置
        if (scTop > thOffset.top) {  //滚动条滚到thead及以下的位置,用临时的thead代替显示
          $('#scroll_head').css('display', 'block');
          $('#scroll_head').offset({ top: scTop, left: thOffset.left });
        }
        else { //滚动条滚到thead上的位置,用table的原始thead显示
          $('#scroll_head').css('display', 'none');
        }
      }
    });
  });
</script>

3、Html内容

<div id="data_div">
  <table>
    @*thead内容及样式同scroll_head中的thead*@
    @*thead使用深背景色,避免滚动时和tbody内容重叠显示*@
    <thead> 
      <tr>
        @*一级标题*@
        <th class="tt1" colspan="2">一级1</th>
        <th class="tt2" colspan="5">一级2</th>
        <th class="tt3" colspan="6">一级3</th>
      </tr>
      <tr>
        @*二级标题*@
        <th style="width: 23px;">二级11</th>
        <th style="width: 36px;">二级12</th>
        <th class="tt" style="width: 40px;">二级21</th>
        <th class="tt" style="width: 30px;">二级22</th>
        <th class="tt" style="width: 30px;">二级23</th>
        <th class="tt" style="width: 30px;">二级23</th>
        <th class="tt" style="width: 30px;">二级24</th>
        <th class="tt" style="width: 30px;">二级25</th>
        <th class="tt" style="width: 30px;">二级31</th>
        <th class="tt" style="width: 30px;">二级32</th>
        <th class="tt" style="width: 30px;">二级33</th>
        <th class="tt" style="width: 30px;">二级33</th>
        <th class="tt" style="width: 30px;">二级34</th>
        <th class="tt" style="width: 30px;">二级35</th>
        <th class="tt" style="width: 30px;">二级36</th>
      </tr>
    </thead>
    <tbody id="data_tbody">
      数据内容,在数据加载完成后调用copyWidth()函数解决兼容性
    </tbody>
  </table>
</div>
<div id="scroll_head" style="display:block; top: 168px; left: 0px; position: relative;">
  <table width="100%">
    <thead> @*thead使用深背景色,避免滚动时和tbody内容重叠显示*@
      <tr>
        @*一级标题*@
        <th class="tt1" colspan="2">一级1</th>
        <th class="tt2" colspan="5">一级2</th>
        <th class="tt3" colspan="6">一级3</th>
      </tr>
      <tr>
        @*二级标题*@
        <th style="width: 23px;">二级11</th>
        <th style="width: 36px;">二级12</th>
        <th class="tt" style="width: 40px;">二级21</th>
        <th class="tt" style="width: 30px;">二级22</th>
        <th class="tt" style="width: 30px;">二级23</th>
        <th class="tt" style="width: 30px;">二级23</th>
        <th class="tt" style="width: 30px;">二级24</th>
        <th class="tt" style="width: 30px;">二级25</th>
        <th class="tt" style="width: 30px;">二级31</th>
        <th class="tt" style="width: 30px;">二级32</th>
        <th class="tt" style="width: 30px;">二级33</th>
        <th class="tt" style="width: 30px;">二级33</th>
        <th class="tt" style="width: 30px;">二级34</th>
        <th class="tt" style="width: 30px;">二级35</th>
        <th class="tt" style="width: 30px;">二级36</th>
      </tr>
    </thead>
  </table>
</div>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
ajax更新数据后,jquery、jq失效问题
Mar 16 Javascript
关于JavaScript中的关联数组分析
Apr 09 Javascript
javascript实现博客园页面右下角返回顶部按钮
Feb 22 Javascript
基于js实现投票的实例代码
Aug 04 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
Aug 17 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
Mar 10 Javascript
jQuery模拟下拉框选择对应菜单的内容
Mar 07 Javascript
js禁止浏览器的回退事件
Apr 20 Javascript
vue2.X组件学习心得(新手必看篇)
Jul 05 Javascript
基于JS开发微信网页录音功能的实例代码
Apr 30 Javascript
js+canvas绘制图形验证码
Sep 21 Javascript
Vue SPA 首屏优化方案
Feb 26 Vue.js
微信开发 JS-SDK 6.0.2 经常遇到问题总结
Dec 08 #Javascript
js实现百度地图定位于地址逆解析,显示自己当前的地理位置
Dec 08 #Javascript
通过Ajax使用FormData对象无刷新上传文件方法
Dec 08 #Javascript
js倒计时小实例(多次定时)
Dec 08 #Javascript
详解JavaScript中的属性和特性
Dec 08 #Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
Dec 08 #Javascript
AngularJS模仿Form表单提交的实现代码
Dec 08 #Javascript
You might like
PHP 高手之路(三)
2006/10/09 PHP
php自动识别文件编码并转换为UTF-8的方法
2014/06/12 PHP
php实现通过ftp上传文件
2015/06/19 PHP
php中define用法实例
2015/07/30 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
excel操作之Add Data to a Spreadsheet Cell
2007/06/12 Javascript
jQuery中的常用事件总结
2009/12/27 Javascript
使用IE6看老赵的博客 jQuery初探
2010/01/17 Javascript
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
javascript仿php的print_r函数输出json数据
2013/09/13 Javascript
document.forms[].submit()使用介绍
2014/02/19 Javascript
js 加密压缩出现bug解决方案
2014/11/25 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
用AngularJS来实现监察表单按钮的禁用效果
2016/11/02 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
2017/08/23 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
2019/12/16 Javascript
Vue中多元素过渡特效的解决方案
2020/02/05 Javascript
js实现从右往左匀速显示图片(无缝轮播)
2020/06/29 Javascript
Django自定义分页与bootstrap分页结合
2021/02/22 Python
Python学习_几种存取xls/xlsx文件的方法总结
2018/05/03 Python
Python3 安装PyQt5及exe打包图文教程
2019/01/08 Python
python3利用ctypes传入一个字符串类型的列表方法
2019/02/12 Python
Django使用Jinja2模板引擎的示例代码
2019/08/09 Python
python实现简易学生信息管理系统
2020/04/05 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
检测浏览器对HTML5和CSS3支持度的方法
2015/06/25 HTML / CSS
Linux的文件类型
2012/03/07 面试题
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
中专生求职自荐信范文
2013/12/22 职场文书
银行员工辞职信范文
2014/01/20 职场文书
小学清明节活动方案
2014/03/08 职场文书
做一个有道德的人演讲稿
2014/05/14 职场文书
解决MySQL Varchar 类型尾部空格的问题
2022/04/06 MySQL
PYTHON InceptionV3模型的复现详解
2022/05/06 Python