利用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 相关文章推荐
让div层随鼠标移动的实现代码 ie ff
Dec 18 Javascript
使用UglifyJS合并/压缩JavaScript的方法
Mar 07 Javascript
javascript中强制执行toString()具体实现
Apr 27 Javascript
jquery鼠标滑过提示title具体实现代码
Aug 06 Javascript
jQuery遍历对象、数组、集合实例
Nov 08 Javascript
jquery移动节点实例
Jan 14 Javascript
jQuery EasyUI中DataGird动态生成列的方法
Apr 05 Javascript
如何制作幻灯片(代码分享)
Jan 06 Javascript
超全面的vue.js使用总结
Feb 12 Javascript
Vue2.5通过json文件读取数据的方法
Feb 27 Javascript
vue.js中npm安装教程图解
Apr 10 Javascript
vue使用nprogress加载路由进度条的方法
Jun 04 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
一些操作和快捷键的理解和讨论
2020/03/04 星际争霸
两种php调用Java对象的方法
2006/10/09 PHP
php简单日历函数
2015/10/28 PHP
Linux系统中为php添加pcntl扩展
2016/08/28 PHP
PHP实现简易图形计算器
2020/08/28 PHP
Nigma vs Alliance BO5 第三场2.14
2021/03/10 DOTA
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
Jquery EasyUI中弹出确认对话框以及加载效果示例代码
2014/02/13 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
javascript实现俄罗斯方块游戏的思路和方法
2015/04/27 Javascript
js获取当前年月日-YYYYmmDD格式的实现代码
2016/06/01 Javascript
有关jQuery中parent()和siblings()的小问题
2016/06/01 Javascript
js匿名函数作为函数参数详解
2016/06/01 Javascript
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
详解小程序不同页面之间通讯的解决方案
2018/11/23 Javascript
浅谈Vue.js组件(二)
2019/04/09 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
JS数组reduce()方法原理及使用技巧解析
2020/07/14 Javascript
Python中字符编码简介、方法及使用建议
2015/01/08 Python
对于Python中RawString的理解介绍
2016/07/07 Python
基于anaconda下强大的conda命令介绍
2018/06/11 Python
利用python将图片版PDF转文字版PDF
2019/05/03 Python
Python如何爬取51cto数据并存入MySQL
2020/08/25 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
关于PySnooper 永远不要使用print进行调试的问题
2021/03/04 Python
Html5元素及基本语法详解
2016/08/02 HTML / CSS
中国专业的综合网上购物商城:京东
2016/08/02 全球购物
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
大学运动会通讯稿
2015/07/18 职场文书
记者节感言
2015/08/03 职场文书
服装店员工管理制度
2015/08/07 职场文书
中学政教处工作总结
2015/08/13 职场文书
2016年国陪研修感言
2015/11/18 职场文书
《百分数的认识》教学反思
2016/02/19 职场文书
Python Django ORM连表正反操作技巧
2021/06/13 Python