利用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 Array(数组)相关方法简述
Jul 25 Javascript
基于JQuery实现鼠标点击文本框显示隐藏提示文本
Feb 23 Javascript
Jquery Ajax解析XML数据(同步及异步调用)简单实例
Feb 12 Javascript
使用JS或jQuery模拟鼠标点击a标签事件代码
Mar 10 Javascript
继续学习javascript闭包
Dec 03 Javascript
Vuex之理解Getters的用法实例
Apr 19 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
Jul 19 Javascript
把vue-router和express项目部署到服务器的方法
Feb 21 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
Apr 17 Javascript
原生js实现随机点名功能
Nov 05 Javascript
js布局实现单选按钮控件
Jan 17 Javascript
JavaScript动画实例之粒子文本的实现方法详解
Jul 28 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实现链式操作的核心思想
2015/06/23 PHP
总结的一些PHP开发中的tips(必看篇)
2017/03/24 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
2017/06/07 PHP
因str_replace导致的注入问题总结
2019/08/08 PHP
JavaScript CSS 修改学习第四章 透明度设置
2010/02/19 Javascript
javascript中的107个基础知识收集整理 推荐
2010/03/29 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
浅谈Javascript 执行顺序
2013/12/18 Javascript
javascript日期计算实例分析
2015/06/29 Javascript
javascript鼠标右键菜单自定义效果
2020/12/08 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
jquery实现提示语淡入效果
2017/05/05 jQuery
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
JavaScript检查数据中是否存在相同的元素(两种方法)
2018/10/07 Javascript
layui button 按钮弹出提示窗口,确定才进行的方法
2019/09/06 Javascript
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
Vue使用CDN引用项目组件,减少项目体积的步骤
2020/10/30 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
Python中AND、OR的一个使用小技巧
2015/02/18 Python
pycharm配置git(图文教程)
2019/08/16 Python
python opencv调用笔记本摄像头
2019/08/28 Python
python自动下载图片的方法示例
2020/03/25 Python
纯CSS实现聊天框小尖角、气泡效果
2014/04/04 HTML / CSS
香蕉共和国Banana Republic官网:美国GAP旗下偏贵族风格服饰品牌
2016/11/21 全球购物
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
编写类String 的构造函数、析构函数和赋值函数
2012/09/09 面试题
工艺员岗位职责
2014/02/11 职场文书
2014年党员创先争优承诺书
2014/05/29 职场文书
励志演讲稿300字
2014/08/21 职场文书
活动总结书怎么写
2015/05/11 职场文书
法院执行局工作总结
2015/08/11 职场文书
Js类的构建与继承案例详解
2021/09/15 Javascript
SpringBoot2零基础到精通之数据与页面响应
2022/03/22 Java/Android