利用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 相关文章推荐
ExtJs事件机制基本代码模型和流程解析
Oct 24 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
Nov 15 Javascript
javascript继承机制实例详解
Nov 20 Javascript
jQuery选择器全集详解
Nov 24 Javascript
javascript实现window.print()去除页眉页脚
Dec 30 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
Nov 02 Javascript
vue-cli+webpack记事本项目创建
Apr 01 Javascript
ES6入门教程之Iterator与for...of循环详解
May 17 Javascript
浅谈实现vue2.0响应式的基本思路
Feb 13 Javascript
小程序实现展开/收起的效果示例
Sep 22 Javascript
Vue使用mixin分发组件的可复用功能
Sep 01 Javascript
2分钟实现一个Vue实时直播系统的示例代码
Jun 05 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
CodeIgniter实现更改view文件夹路径的方法
2014/07/04 PHP
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
11个用于提高排版水平的基于jquery的文字效果插件
2012/09/14 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
JQuery异步获取返回值中文乱码的解决方法
2015/01/29 Javascript
jQuery学习笔记之Ajax用法实例详解
2015/12/01 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
Bootstrap和Java分页实例第一篇
2016/12/23 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
2016/12/27 Javascript
js实现固定宽高滑动轮播图效果
2017/01/13 Javascript
Angularjs使用指令做表单校验的方法
2017/03/31 Javascript
vue.js 上传图片实例代码
2017/06/22 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
2017/07/18 Javascript
9种改善AngularJS性能的方法
2017/11/28 Javascript
JavaScript同源策略和跨域访问实例详解
2018/04/03 Javascript
element-ui 上传图片后清空图片显示的实例
2018/09/04 Javascript
小程序实现留言板
2018/11/02 Javascript
vue-cli系列之vue-cli-service整体架构浅析
2019/01/14 Javascript
Python中str.join()简单用法示例
2018/03/20 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
Django REST framework视图的用法
2019/01/16 Python
Python3.5字符串常用操作实例详解
2019/05/01 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
2019/06/24 Python
python 字符串常用方法汇总详解
2019/09/16 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
怎么快速自学python
2020/06/22 Python
CSS3实现的炫酷菜单代码分享
2015/03/12 HTML / CSS
HTML5之多线程(Web Worker)
2019/01/02 HTML / CSS
Chemist Warehouse中文网:澳洲连锁大药房
2021/02/05 全球购物
介绍一下木马病毒的种类
2015/07/26 面试题
物流专业大学应届生求职信
2013/11/03 职场文书
python实战之90行代码写个猜数字游戏
2021/04/22 Python
golang判断key是否在map中的代码
2021/04/24 Golang
九大龙王魂骨,山龙王留下躯干骨,榜首死的最憋屈(被捏碎)
2022/03/18 国漫