利用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 小型打飞机游戏实现原理说明
Oct 28 Javascript
改善用户体验的五款jQuery插件分享
May 22 Javascript
JavaScript中两个感叹号的作用说明
Dec 28 Javascript
jQuery关于导航条背景切换效果实现示例
Sep 04 Javascript
微信小程序实现的贪吃蛇游戏【附源码下载】
Jan 03 Javascript
详解如何在Vue里建立长按指令
Aug 20 Javascript
angularJs中$scope数据序列化的实例
Sep 30 Javascript
基于jquery实现九宫格拼图小游戏
Nov 30 jQuery
详解微信小程序回到顶部的两种方式
May 09 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
Sep 12 Javascript
微信小程序canvas截取任意形状的实现代码
Jan 13 Javascript
JavaScript实现简单的图片切换功能(实例代码)
Apr 10 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
vBulletin HACK----关于排版的两个HACK
2006/10/09 PHP
用PHP生成静态HTML速度快类库
2007/03/18 PHP
php面向对象全攻略 (十四) php5接口技术
2009/09/30 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
Jquery 扩展方法
2010/05/06 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
Javascript和Java获取各种form表单信息的简单实例
2014/02/14 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
javascript闭包的理解
2015/04/01 Javascript
jQuery+HTML5实现手机摇一摇换衣特效
2015/06/05 Javascript
浅谈使用MVC模式进行JavaScript程序开发
2015/11/10 Javascript
灵活的理解JavaScript中的this指向
2016/02/25 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
Bootstrap实现下拉菜单效果
2016/04/29 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
JS中动态创建元素的三种方法总结(推荐)
2016/10/20 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
详解vue中使用express+fetch获取本地json文件
2017/10/10 Javascript
利用node实现一个批量重命名文件的函数
2017/12/21 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
在Chrome DevTools中调试JavaScript的实现
2020/04/07 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
用Python编写一个国际象棋AI程序
2014/11/28 Python
Python中使用PIL库实现图片高斯模糊实例
2015/02/08 Python
python 的列表遍历删除实现代码
2020/04/12 Python
matplotlib设置legend图例代码示例
2017/12/19 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
Python自动化测试基础必备知识点总结
2021/02/07 Python
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
计算机专业毕业生推荐信
2013/11/25 职场文书
旅游管理专业大学生职业规划书
2014/02/27 职场文书
老公婚前保证书
2015/02/28 职场文书
办公用品管理制度
2015/08/04 职场文书
诚信高考倡议书
2019/06/24 职场文书
5种 JavaScript 方式实现数组扁平化
2021/10/05 Javascript