利用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中出现乱码的处理心得
Dec 24 Javascript
jquery URL参数判断,确定菜单样式
May 31 Javascript
JQuery防止退格键网页后退的实现代码
Mar 23 Javascript
jQuery中[attribute^=value]选择器用法实例
Dec 31 Javascript
JavaScript Sort 的一个错误用法示例
Mar 20 Javascript
JQuery和PHP结合实现动态进度条上传显示
Nov 23 Javascript
Vue中render函数的使用方法
Jan 31 Javascript
JS实现简单的文字无缝上下滚动功能示例
Jun 22 Javascript
vue中npm包全局安装和局部安装过程
Sep 03 Javascript
JS如何在数组指定位置插入元素
Mar 10 Javascript
Taro UI框架开发小程序实现左滑喜欢右滑不喜欢效果的示例代码
May 18 Javascript
微信小程序 WeUI扩展组件库的入门教程
Apr 21 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
PHP语法速查表
2006/12/06 PHP
php 自写函数代码 获取关键字 去超链接
2010/02/08 PHP
CI框架学习笔记(二) -入口文件index.php
2014/10/27 PHP
PHP比你想象的好得多
2014/11/27 PHP
Zend Framework动作助手Url用法详解
2016/03/05 PHP
PHP实现页面静态化的超简单方法
2016/09/06 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
2009/08/09 Javascript
Javascript解决常见浏览器兼容问题的12种方法
2010/01/04 Javascript
JQuery 选择和过滤方法代码总结
2010/11/19 Javascript
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
2015/12/23 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
2017/06/28 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
[02:28]DOTA2英雄基础教程 灰烬之灵
2013/12/19 DOTA
[38:31]完美世界DOTA2联赛PWL S3 Magma vs GXR 第一场 12.13
2020/12/17 DOTA
Python实现的HTTP并发测试完整示例
2020/04/23 Python
python实现飞机大战小游戏
2019/11/08 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
python字典按照value排序方法
2020/12/28 Python
python中操作文件的模块的方法总结
2021/02/04 Python
幼儿园大班毕业教师寄语
2014/04/03 职场文书
2014预备党员党课学习心得范文
2014/07/08 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
小学教师自我评价
2015/03/04 职场文书
2015新学期校长寄语(3篇)
2015/03/25 职场文书
对外汉语教师推荐信
2015/03/27 职场文书
幼儿园奖惩制度范本
2015/08/05 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL
如何获取numpy array前N个最大值
2021/05/14 Python
pytorch 梯度NAN异常值的解决方案
2021/06/05 Python