利用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 相关文章推荐
比较详细的关于javascript中void(0)的具体含义解释
Aug 02 Javascript
两个JavaScript jsFiddle JSBin在线调试器
Mar 14 Javascript
浅谈js里面的InttoStr和StrtoInt
Jun 14 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
Sep 09 Javascript
Javascript 制作图形验证码实例详解
Dec 22 Javascript
D3.js进阶系列之CSV表格文件的读取详解
Jun 06 Javascript
Angular.JS中select下拉框设置value的方法
Jun 20 Javascript
打通前后端构建一个Vue+Express的开发环境
Jul 17 Javascript
JavaScript监听键盘事件代码实现
Jun 03 Javascript
JS如何定义用字符串拼接的变量
Jul 11 Javascript
Ant design vue中的联动选择取消操作
Oct 31 Javascript
动态规划之使用备忘录来改进Javascript函数
Apr 07 Javascript
微信开发 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
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
PHP 多维数组排序实现代码
2009/08/05 PHP
php+ajax实现异步上传文件或图片功能
2017/07/18 PHP
PHP中mysqli_get_server_version()的实例用法
2020/02/03 PHP
javascript的函数
2007/01/31 Javascript
js下弹出窗口的变通
2007/04/18 Javascript
Js 弹出框口并返回值的两种常用方法
2010/12/30 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
2016/05/24 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
Three.js获取鼠标点击的三维坐标示例代码
2017/03/24 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
2017/07/24 Javascript
VUE前端cookie简单操作
2017/10/17 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
2018/06/25 Javascript
boostrap模态框二次弹出清空原有内容的方法
2018/08/10 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
JS数据类型STRING使用实例解析
2019/12/18 Javascript
Python正则表达式介绍
2012/08/06 Python
从头学Python之编写可执行的.py文件
2017/11/28 Python
分析python请求数据
2018/08/19 Python
深入理解Python异常处理的哲学
2019/02/01 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
2019/07/15 Python
Python3操作MongoDB增册改查等方法详解
2020/02/10 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
2020/07/21 Python
Python在后台自动解压各种压缩文件的实现方法
2020/11/10 Python
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
经济信息管理专业大学生求职信
2013/09/27 职场文书
历史专业个人求职信范文
2013/12/07 职场文书
上课睡觉万能检讨书
2015/02/17 职场文书
2015年社区矫正工作总结
2015/04/21 职场文书
签字仪式主持词
2015/07/03 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书
高中信息技术教学反思
2016/02/16 职场文书
《确定位置》教学反思
2016/02/18 职场文书
Springboot如何同时装配两个相同类型数据库
2021/11/17 Java/Android
python神经网络学习 使用Keras进行简单分类
2022/05/04 Python