zoukankan      html  css  js  c++  java
  • 冻结表格行列的思路

    html和css没有提供对表格冻结行列的属性,但是我们操作大型,需要滚动表格的时候,处于方便用户查看的关系,表格往往需要这个功能。

    一、只需要冻结某一行(列)的情况

      步骤1、把看起来是一个整体的表格拆分成两部分,table1负责固定部分如thead,而table2负责可以拖动的部分如tbody。

            示例代码:

     1 <div class="table-out nicescroll-table">
     2     <div class="table1" >
          
    <!--我这里没有对table1或者table2使用定位,所有table1和table2分别负责表头和表身-->
    <!--如果想要table1或者table2使用定位,那么有一个更好的方法,那就是table1是表头,而table2是表头+表身的完整表格,然后再把table1的表头叠加在table2的表头上方--> 3 <!--table1的thead--> 4 <table> 5 <thead> 6 <tr> 7 <th class="width-100">学生名字</th> 8 <th class="width-100">学号</th> 9 <th class="width-100">出勤次数</th> 10 <th class="width-200">周一</th> 11 <th class="width-200">周二</th> 12 </tr> 13 </thead> 14 </table> 15 </div> 16 <div class="table-main"> 17 <!--table2的tbody--> 18 <table> 19 <tbody> 20 <tr> 21 <td class="width-100">张小月</td> 22 <td class="width-100">2123432</td> 23 <td class="width-100">7</td> 24 <td class="width-200">不错</td> 25 <td class="width-200">不错</td> 26 </tr> 27 <tr> 28 <td class="width-100">张大月</td> 29 <td class="width-100">2123432</td> 30 <td class="width-100">7</td> 31 <td class="width-200"></td> 32 <td class="width-200"></td> 33 </tr> 34 <tr> 35 <td class="width-100">张月月</td> 36 <td class="width-100">2123432</td> 37 <td class="width-100">7</td> 38 <td class="width-200"></td> 39 <td class="width-200"></td> 40 </tr> 41 </tbody> 42 </table> 43 </div>

      步骤2、把两个table固定好了之后,监听table2的滚动,用table2的滚动带动table1的滚动(通过设置css里的left 或者 scroll,如果是绝对定位那么只能用设定css中left的方法)

    1  $('.table2').scroll(function() {
    2         var scrollLeft = $(this).scrollLeft();
    3         $('.table1').scrollLeft(scrollLeft);
    4     });

       效果图如下:

    二、同时冻结行和列的情况

       步骤1、把看起来是一个整体的表格拆分成四个部分

     

            示例代码:

     1 <div class="table-out">
     2     <!--四个table,少一个都不行-->
     3     <div class="table-top" >
     4         <table>
     5             <thead>
     6                 <tr>
     7                     <th class="width-100">学生名字</th>
     8                     <th class="width-100">学号</th>
     9                     <th class="width-100">出勤次数</th>
    10                     <th class="width-200">周一</th>
    11                     <th class="width-200">周二</th>
    12                 </tr>
    13             </thead>
    14         </table>
    15     </div>
    16     <div class="table-main">
    17         <table>
    18             <tbody>
    19                 <tr>
    20                     <td class="width-100">张小月</td>
    21                     <td class="width-100">2123432</td>
    22                     <td class="width-100">7</td>
    23                     <td class="width-200">不错</td>
    24                     <td class="width-200">不错</td>
    25                 </tr>
    26                 <tr>
    27                     <td class="width-100">张大月</td>
    28                     <td class="width-100">2123432</td>
    29                     <td class="width-100">7</td>
    30                     <td class="width-200"></td>
    31                     <td class="width-200"></td>
    32                 </tr>   
    33                 <tr>
    34                     <td class="width-100">张月月</td>
    35                     <td class="width-100">2123432</td>
    36                     <td class="width-100">7</td>
    37                     <td class="width-200"></td>
    38                     <td class="width-200"></td>
    39                 </tr>
    40             </tbody>     
    41         </table>                
    42     </div>
    43     <div class="table-left">
    44         <table>
    45             <tbody>
    46                 <tr>
    47                     <td class="width-100">张小月</td>
    48                     <td class="width-100">2123432</td>
    49                     <td class="width-100">7</td>
    50                 </tr>
    51                 <tr>
    52                     <td class="width-100">张大月</td>
    53                     <td class="width-100">2123432</td>
    54                     <td class="width-100">7</td>
    55                 </tr>   
    56                 <tr>
    57                     <td class="width-100">张月月</td>
    58                     <td class="width-100">2123432</td>
    59                     <td class="width-100">7</td>
    60                 </tr>
    61             </tbody>
    62         </table>  
    63     </div> 
    64     <div class="table-left-top" >
    65         <table>
    66             <thead>
    67                 <tr>
    68                     <th class="width-100">学生名字</th>
    69                     <th class="width-100">学号</th>
    70                     <th class="width-100">出勤次数</th>
    71                 </tr>
    72             </thead>
    73         </table>
    74     </div>
    75 </div> 

            步骤2、把四个table固定好了之后,监听table-main的滚动,用table-main的滚动带动table-top的左右移动和table-left的上下移动。在这个示例里,我对table-left用到了绝对定位,所以给table-left设定scroll无效,但是可以使用改变table-left的css中top的属性值来使得table-left上下移动。

    var tableLeftTop1 = parseInt($('.table-left').css('top'));
    $('.table-main').scroll(function() {
        var scrollLeft = $(this).scrollLeft();
        var scrollTop = tableLeftTop1 - $(this).scrollTop()+'px';
        $('.table-left').css('top',scrollTop);
        $('.table-top').scrollLeft(scrollLeft);
    });

             示例效果图:

            另外,你也可以将四个table这样分类,这两种方法怎么分都行,万变不离其宗,用main-table的左右移动带动table-top和table-left的移动:

    我这里为了使table的滚动条更为美观些,我使用了nicescroll滚动条插件。否则你所见到的就是又粗又笨拙的默认滚动条啦~(偷笑脸)

    table冻结行列的demo链接:https://github.com/zhangqiongyue/smallDemo

  • 相关阅读:
    python爬虫模拟登陆
    华为手机怎么连接苹果电脑?
    python 3 爬取百度图片
    让Netty入门变得简单
    ylbtech-LanguageSamples-UserConversions(用户定义的转换)
    ylbtech-LanguageSamples-Unsafe(不安全代码)
    ylbtech-LanguageSamples-Threading(线程处理)
    ylbtech-LanguageSamples-Struct(结构)
    ylbtech-LanguageSamples-SimpleVariance
    ylbtech-LanguageSamples-Security(安全)
  • 原文地址:https://www.cnblogs.com/zhangqiongyue/p/6146996.html
Copyright © 2011-2022 走看看