table的列固定

<body onload="showFix(true,false,initTableId);">

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus?">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>Document</title>
  <style type="text/css">
    body{
       margin:0px;
    }
    table{
        width:auto;
        margin:0px;
        font:Georgia 11px;
        color:#333333;
        text-align:center;
        border-collapse:collapse;
    }
    table td{
        border:1px solid #f00;
        width:100px;
        height:30px;
        padding:15px;
    }
 </style>  

 <script>  

    var initLeft;
    var initTop;
    var isFixColumn = false;
    var isFixRow = false;
    /**
     * added by 王伟 20160612
     * param:
     *    isFixC: 是否固定列 true/false
     *    isFixR: 是否固定行 true/false
     *    initTableId: 原始表ID
     */
    function showFix(isFixC,isFixR,initTableId){
        //是否显示固定列或者固定行
        isFixColumn = isFixC;
        isFixRow = isFixR;
        if(checkScrollBar(‘h‘)){
             document.getElementById("fixedColumnDiv").style.display="block";
        }
        if(checkScrollBar(‘y‘)){
             document.getElementById("fixedRowDiv").style.display="block";
        }
        //获取原始表的具体位置
        var initTable = document.getElementById(initTableId);
        initLeft = getPosition(initTable,‘left‘);
        initTop = getPosition(initTable,‘top‘); //如果div和table 之间有margin,则减去响应数值  

        if(checkScrollBar(‘h‘)){
            var fixedColumnDiv = document.getElementById("fixedColumnDiv");
            fixedColumnDiv.style.position=‘absolute‘;
            fixedColumnDiv.style.left = initLeft;
            fixedColumnDiv.style.top = initTop;
        }
        if(checkScrollBar(‘y‘)){
            var fixedRowDiv = document.getElementById("fixedRowDiv");
            fixedRowDiv.style.position=‘absolute‘;
            fixedRowDiv.style.left = initLeft;
            fixedRowDiv.style.top = initTop;
        }
    }  

    /**
     * 滚动时重新设置div层的位置
     */
    window.onscroll = function(){
          if(checkScrollBar(‘h‘)){
              var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
              var fixedColumnDiv = document.getElementById("fixedColumnDiv");
              fixedColumnDiv.style.position=‘absolute‘;
              fixedColumnDiv.style.left = (initLeft+scrollLeft)+‘px‘;
              fixedColumnDiv.style.top = initTop+‘px‘;
          }
          if(checkScrollBar(‘y‘)){
              var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
              var fixedRowDiv = document.getElementById("fixedRowDiv");
              fixedRowDiv.style.position=‘absolute‘;
              fixedRowDiv.style.left = initLeft+‘px‘;
              fixedRowDiv.style.top = (initTop+scrollTop)+‘px‘;
          }
    }   

    /**
     * 获取元素的位置偏移量信息
     * param:
     *    left:获取左偏移量
     *    top: 获取上偏移量
     */
    function getPosition(obj,type){
        var topValue= 0,leftValue= 0;
        while(obj){
           leftValue+= obj.offsetLeft;
           topValue+= obj.offsetTop;
           obj= obj.offsetParent;
        }
        finalvalue = leftValue + "," + topValue;
        if(type == ‘left‘){
            return   leftValue;
        }else if(type == ‘top‘){
            return topValue;
        }else {
            return 0;
        }
    }   

    /**
     * 获取是否有滚动条
     * param: h: 判断是否有横向滚动条,y:判断是否有竖向滚动条
     * return:boolean, true:有,false:无
     */
    function checkScrollBar(type){
        //判断是否有滚动条,有滚动条才显示固定列层
        var visuals = getPageSize(‘visual‘);
        var reals = getPageSize(‘real‘);
        if(type == ‘h‘ && isFixColumn){
            if(document.body.style.overflow!="hidden"
                && document.body.scroll!="no"
                    && reals[1] > visuals[1])
            {
                 return true;
            }else{
                 return false;
            }
        }
        if(type == ‘y‘ && isFixRow){
            if(document.body.style.overflow!="hidden"
                && document.body.scroll!="no"
                    && reals[0] > visuals[0])
            {
                 return true;
            }else{
                 return false;
            }
        }
        return false;
    }  

    /**
     * 浏览器兼容的获取网页实际内容大小
     * param: type 获取大小类型(visual或real)
     * 参数值说明: visual: 获取网页课件区域高宽,real:网页内容真实宽高
     */
    function getPageSize(type) {
        //检测浏览器的渲染模式
        var body = (document.compatMode&&document.compatMode.toLowerCase() == "css1compat")?document.documentElement:document.body;
        var bodyOffsetWidth = 0;
        var bodyOffsetHeight = 0;
        var bodyScrollWidth = 0;
        var bodyScrollHeight = 0;
        var pageDimensions = [0, 0];
        pageDimensions[0] = body.clientHeight;
        pageDimensions[1] = body.clientWidth;
        if(type == ‘visual‘){
           return pageDimensions;
        }
        bodyOffsetWidth = body.offsetWidth;
        bodyOffsetHeight = body.offsetHeight;
        bodyScrollWidth = body.scrollWidth;
        bodyScrollHeight = body.scrollHeight;
        if (bodyOffsetHeight > pageDimensions[0]) {
            pageDimensions[0] = bodyOffsetHeight;
        }
        if (bodyOffsetWidth > pageDimensions[1]) {
            pageDimensions[1] = bodyOffsetWidth;
        }
        if (bodyScrollHeight > pageDimensions[0]) {
            pageDimensions[0] = bodyScrollHeight;
        }
        if (bodyScrollWidth > pageDimensions[1]) {
            pageDimensions[1] = bodyScrollWidth;
        }
        return pageDimensions;
    }  

 </script>
 </head>
 <body >
  <table id="initTable">
  <tr>
        <td>111</td><td>222</td><td>333</td><td>444</td><td>555</td><td>666</td>
        <td>777</td><td>888</td><td>999</td><td>000</td><td>aaa</td><td>bbb</td>
        <td>ccc</td><td>ddd</td><td>eee</td><td>fff</td><td>ggg</td><td>nnn</td>
        <td>bbb</td><td>ccc</td><td>www</td><td>eee</td><td>vvv</td><td>rrr</td>
  </tr>
  <tr>
        <td>111</td><td>222</td><td>333</td><td>444</td><td>555</td><td>666</td>
        <td>777</td><td>888</td><td>999</td><td>000</td><td>aaa</td><td>bbb</td>
        <td>ccc</td><td>ddd</td><td>eee</td><td>fff</td><td>ggg</td><td>nnn</td>
        <td>bbb</td><td>ccc</td><td>www</td><td>eee</td><td>vvv</td><td>rrr</td>
  </tr>
  <tr>
        <td>111</td><td>222</td><td>333</td><td>444</td><td>555</td><td>666</td>
        <td>777</td><td>888</td><td>999</td><td>000</td><td>aaa</td><td>bbb</td>
        <td>ccc</td><td>ddd</td><td>eee</td><td>fff</td><td>ggg</td><td>nnn</td>
        <td>bbb</td><td>ccc</td><td>www</td><td>eee</td><td>vvv</td><td>rrr</td>
  </tr>
  <tr>
        <td>111</td><td>222</td><td>333</td><td>444</td><td>555</td><td>666</td>
        <td>777</td><td>888</td><td>999</td><td>000</td><td>aaa</td><td>bbb</td>
        <td>ccc</td><td>ddd</td><td>eee</td><td>fff</td><td>ggg</td><td>nnn</td>
        <td>bbb</td><td>ccc</td><td>www</td><td>eee</td><td>vvv</td><td>rrr</td>
  </tr>
  <tr>
        <td>111</td><td>222</td><td>333</td><td>444</td><td>555</td><td>666</td>
        <td>777</td><td>888</td><td>999</td><td>000</td><td>aaa</td><td>bbb</td>
        <td>ccc</td><td>ddd</td><td>eee</td><td>fff</td><td>ggg</td><td>nnn</td>
        <td>bbb</td><td>ccc</td><td>www</td><td>eee</td><td>vvv</td><td>rrr</td>
  </tr>
  <tr>
        <td>111</td><td>222</td><td>333</td><td>444</td><td>555</td><td>666</td>
        <td>777</td><td>888</td><td>999</td><td>000</td><td>aaa</td><td>bbb</td>
        <td>ccc</td><td>ddd</td><td>eee</td><td>fff</td><td>ggg</td><td>nnn</td>
        <td>bbb</td><td>ccc</td><td>www</td><td>eee</td><td>vvv</td><td>rrr</td>
  </tr>
  <tr>
        <td>111</td><td>222</td><td>333</td><td>444</td><td>555</td><td>666</td>
        <td>777</td><td>888</td><td>999</td><td>000</td><td>aaa</td><td>bbb</td>
        <td>ccc</td><td>ddd</td><td>eee</td><td>fff</td><td>ggg</td><td>nnn</td>
        <td>bbb</td><td>ccc</td><td>www</td><td>eee</td><td>vvv</td><td>rrr</td>
  </tr>
  <tr>
        <td>111</td><td>222</td><td>333</td><td>444</td><td>555</td><td>666</td>
        <td>777</td><td>888</td><td>999</td><td>000</td><td>aaa</td><td>bbb</td>
        <td>ccc</td><td>ddd</td><td>eee</td><td>fff</td><td>ggg</td><td>nnn</td>
        <td>bbb</td><td>ccc</td><td>www</td><td>eee</td><td>vvv</td><td>rrr</td>
  </tr>
  </table>  

  <!-- 复制的固定头两列 -->
  <div id="fixedColumnDiv" align="center" style="width:100px;position:Fixed;display:none;">
  <table>
    <tr bgcolor="red"><td>111</td><td>222</td></tr>
    <tr bgcolor="red"><td>111</td><td>222</td></tr>
    <tr bgcolor="red"><td>111</td><td>222</td></tr>
    <tr bgcolor="red"><td>111</td><td>222</td></tr>
    <tr bgcolor="red"><td>111</td><td>222</td></tr>
    <tr bgcolor="red"><td>111</td><td>222</td></tr>
    <tr bgcolor="red"><td>111</td><td>222</td></tr>
    <tr bgcolor="red"><td>111</td><td>222</td></tr>
  </table>
  </div>  

  <!-- 复制的固定头一行 -->
  <div id="fixedRowDiv" align="center" style="height:auto;position:Fixed;display:none;">
  <table>
    <tr bgcolor="blue">
        <td>111</td><td>222</td><td>333</td><td>444</td><td>555</td><td>666</td>
        <td>777</td><td>888</td><td>999</td><td>000</td><td>aaa</td><td>bbb</td>
        <td>ccc</td><td>ddd</td><td>eee</td><td>fff</td><td>ggg</td><td>nnn</td>
        <td>bbb</td><td>ccc</td><td>www</td><td>eee</td><td>vvv</td><td>rrr</td>
    </tr>
  </table>
  </div>  

 </body>
</html>

  

时间: 2025-01-12 23:39:55

table的列固定的相关文章

CSS简单table首列固定

日前公司业务需求,将几个页面Table(也有一个页面几个table的情况)首列固定.网上查找资料最简便的做法是,将固定列(或者行)与滑动数据分别放在两个table里.因为我的需求是在 原有的table上进行编辑修改,不宜大幅度动原有代码所以没有采用. 考虑到时间成本的问题最终解决代码如下.值得注意的地方有几点: 第一,使用 css experssion动态表达式取值 加上eval绑定为较规范写法(也有说可以兼容IE6). 第二,必须使用兼容视图(IE)浏览,否则Freezingcol中left属

使用css固定table第一列

.table{width:100%;overflow-x: scroll;background-color:#7c95b5;} .fixedTable{width:160%;text-align: center;color:#fff;font-size:14px; border-collapse:collapse;} .fixedTable tr{line-height: 30px;border:1px solid #fff;} .fixedTable tr:first-child{height

bootstrap table实现iview固定列的效果

因为bootstrap自带的固定列效果满足不了公司需求,所以借助fixed-table这个插件完成了iview固定列的效果 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>左右两侧固定列,中间内容可以横向拖动</title> <link rel="stylesheet" hr

JS组件系列——Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案

前言:最近项目里面需要用到表格的冻结列功能,所谓“冻结列”,就是某些情况下表格的列比较多,需要固定前面的几列,后面的列滚动.遗憾的是,bootstrap table里自带的fixed column功能有一点bug,于是和同事讨论该如何解决,于是就有了这篇文章. 一.起因回顾 最近项目里面有一个表格需求,该表格列是动态产生的,而且列的数量操作一定值以后就会出现横向滚动条,滚动的时候需要前面几列固定.也就是所谓的excel的冻结列功能.该如何实现呢?不用多说,当然是查文档,于是找到了这篇http:/

自定义data table 的列类型,并填充数据

combobox 的 datasource 一般是查询存储过程得到 , 但在测试或演示时,也可以自己定义 , 方法是 : DataTable customerTable = new DataTable(); customerTable.Columns.Add("clsCustomerID", typeof(string)); //定义列类型 customerTable.Columns.Add("clsCustomerNM", typeof(string)); Dat

asp.net table表格表头及列固定实现

在开发中常会遇到table表格中列特别多,下拉后,表头就看不见了,水平滚动后,第1.2列就看不见了,于是需求就出来了,就是需要固定table的表头和列. demo结构如下图所示: demo下载地址:http://download.csdn.net/detail/taomanman/9124949 示例运行效果如下图所示: 版权声明:本文为博主原创文章,未经博主允许不得转载.

表格列固定

<!doctype html> <html dir="ltr" lang="zh-CN"> <head> <meta charset="utf-8"/> <title>类似excel的滚动机制,当移动滚动条时固定table的第一行和第一列</title> <style type="text/css"> #table-container{widt

ElementUI Table 首行固定

本文地址: https://www.cnblogs.com/veinyin/p/12101047.html 需求描述:首行固定,吸附在表头下,数据多时其他行可以纵向滚动 方案一  两个表格拼凑 第一个表格展示头部和固定行 第二个表格展示其它数据 示意图如下 适用场景:仅横向 纵向均无滚动条时可用 若有横向滚动条,两个表格的滚动条是分开的,会出现滚动A  B不动,或滚动B A不动的情况,Windows下会展示两个横向滚动条,不美观 若有纵向滚动条,在Windows下滚动条是默认有宽度的,滚动条的宽

表格固定列固定表头插件结合css3

/*20170628固定表格列*/ ;(function($){ $.fn.Scrollhanle=function(set){ var opt=$.extend({ size:3 },set||{}); return this.each(function(){ var sleft=$(this); var $color='#FFF'; var $headtr=sleft.find('thead>tr'); var $tbody=sleft.find('tbody tr'); sleft.scr