利用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中的new的使用方法与注意事项
May 16 Javascript
不用MOUSEMOVE也能滑动啊
May 23 Javascript
创建、调用JavaScript对象的方法集锦
Dec 24 Javascript
JavaScript实现动画打开半透明提示层的方法
Apr 21 Javascript
jQuery的事件委托实例分析
Jul 15 Javascript
使用jQuery处理AJAX请求的基础学习教程
May 10 Javascript
微信小程序 progress组件详解及实例代码
Oct 25 Javascript
angular+bootstrap的双向数据绑定实例
Mar 03 Javascript
详解Vue组件插槽的使用以及调用组件内的方法
Nov 13 Javascript
原来JS还可以这样拆箱转换详解
Feb 01 Javascript
vue基于better-scroll仿京东分类列表
Jun 30 Javascript
解决ant Design中Select设置initialValue时的大坑
Oct 29 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
基于mysql的bbs设计(四)
2006/10/09 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
PHP中strtotime函数使用方法分享
2012/01/10 PHP
PHP类与对象中的private访问控制的疑问
2012/11/01 PHP
探讨Hessian在PHP中的使用分析
2013/06/13 PHP
php实现在多维数组中查找特定value的方法
2015/07/29 PHP
Smarty环境配置与使用入门教程
2016/05/11 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
原创javascript小游戏实现代码
2010/08/19 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
2013/11/21 Javascript
js实现鼠标悬浮给图片加边框的方法
2015/01/30 Javascript
fastclick插件导致日期(input[type=&quot;date&quot;])控件无法被触发该如何解决
2015/11/09 Javascript
微信小程序加载更多 点击查看更多
2016/11/29 Javascript
vue 粒子特效的示例代码
2017/09/19 Javascript
详解vue-cli脚手架build目录中的dev-server.js配置文件
2017/11/24 Javascript
.vue文件 加scoped 样式不起作用的解决方法
2018/05/28 Javascript
Vue通过Blob对象实现导出Excel功能示例代码
2020/07/31 Javascript
openLayer4实现动态改变标注图标
2020/08/17 Javascript
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
[02:18]《我与DAC》之工作人员:为了热爱DOTA2的玩家们
2018/03/28 DOTA
使用IPython来操作Docker容器的入门指引
2015/04/08 Python
python编写扎金花小程序的实例代码
2021/02/23 Python
详解CSS3中nth-child与nth-of-type的区别
2017/01/05 HTML / CSS
俄罗斯的精英皮具:Wittchen
2018/01/29 全球购物
Arti-shopping中文官网:大型海外商品一站式直邮平台
2020/03/23 全球购物
J2EE包括哪些技术
2016/11/25 面试题
大学生实习证明范本
2014/01/15 职场文书
心理咨询承诺书
2014/05/20 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
幼儿园感恩节活动方案2014
2014/10/11 职场文书
个人汇报材料范文
2014/12/30 职场文书
2015仓库保管员年终工作总结
2015/05/13 职场文书
CSS极坐标的实例代码
2021/06/03 HTML / CSS
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android