用html实现excel冻结窗口的功能 固定行固定列

如图显示:

红色部分为固定的行列。

话不多说,下图代码,直接复制出来新建一个html文件打开即可;

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  <title>固定标题列、标题头table</title>
  <style>
    table {
      border-collapse: collapse;
      border-spacing: 0px;
      width: 100%;
      border: #9E9E9E solid 0px;
      font-family: "Microsoft YaHei UI";
      font-size: 14px;
    }
    td {
      mso-style-parent: style0;
      padding-top: 1px;
      padding-right: 1px;
      padding-left: 1px;
      mso-ignore: padding;
      color: windowtext;
      font-size: 12.0pt;
      font-weight: 400;
      font-style: normal;
      text-decoration: none;

      mso-generic-font-family: auto;
      mso-font-charset: 134;
      mso-number-format: General;
      text-align: general;
      vertical-align: bottom;
      border: none;
      mso-background-source: auto;
      mso-pattern: auto;
      mso-protection: locked visible;
      white-space: nowrap;
      mso-rotate: 0;
    }
    table td {
      border: 1px solid #9E9E9E;
      height: 25px;
      text-align: center;
      border-left: 0px;
    }

    table th {
      border: #9E9E9E solid 1px;
      white-space: nowrap;
      height: 21px;
      border-top: 0px;
      border-left: 0px;
    }

    .t_left {
      width: 30%;
      height: auto;
      float: left;
      border-top: 1px solid #9E9E9E;
      border-left: 1px solid #9E9E9E;
      -webkit-box-sizing: border-box;
      -moz-box-sizing: border-box;
      box-sizing: border-box;
    }
    /*t_r_content和cl_freeze高度相差20px, 高度为外观显示高度,可根据情况调整*/

    .t_r_content {
      width: 100%;
      height: 220px;
      background: #fff;
      overflow: auto;
    }

    .cl_freeze {
      height: 200px;
      overflow: hidden;
      width: 100%;
    }
    /* width 调整左边标题列宽度(左侧外观显示宽度); 指定为width:auto 在Opera下显示有问题; height比 t_r_content 高度小20px*/
    /* width 宽度为 右侧外观显示宽度 实际显示宽度大小为“t_r”宽度加上“cl_freeze”宽度 */
    /* 如果显示不正常,调整 t_r的width 使其和t_left的width之和小于100%;等于100%时会有问题*/

    .t_r {
      width: 70%;
      height: auto;
      float: left;
      border-top: 1px solid #9E9E9E;
      border-right: #9E9E9E solid 1px;
      -webkit-box-sizing: border-box;
      -moz-box-sizing: border-box;
      box-sizing: border-box;
    }

    .t_r table {
      width: 1700px;
    }

    .t_r_title {
      width: 1720px;
    }
    /*宽度比 t_r table 大20px (至少大20,小了滚动条滑到右侧显示有问题)*/

    .t_r_t {
      width: 100%;
      overflow: hidden;
    }

    .bordertop {
      border-top: 0px;
    }
    .t-title{
      font-size: 18px;
      line-height: 30px;
      height: 30px;
    }
    th.t-col-num ,th.t-row-num ,td.t-row-num{
      background: #d8d8d8;
      color: #555;
    }
    .t-row-title{
      background: rgb(191, 191, 191);
    }
  </style>
  <script>
    function aa() {
      var a = document.getElementById("t_r_content").scrollTop+1;
      var b = document.getElementById("t_r_content").scrollLeft;
      document.getElementById("cl_freeze").scrollTop = a;
      document.getElementById("t_r_t").scrollLeft = b;
    }
  </script>
</head>

<body>
<div class="t-wrap">
  <!--<div class="t-top" style="width:100%">
    <table>
      <thead>
      <tr>
        <th class="t-row-num" width="20"></th>
        <th width="80">A</th>
        <th width="80">B</th>
        <th width="200">C</th>
        <th width="200">D</th>
        <th width="200">E</th>
        <th width="200">F</th>
        <th width="200">G</th>
        <th width="200">H</th>
      </tr>
      <tr>
        <th class="t-row-num" width="20">1</th>
        <th colspan="8" class="t-title">这里是标题内容</th>
      </tr>
      </thead>
    </table>
  </div>-->
  <div style="width:100%">
    <div class="t_left">
      <div style="width:100%;">
        <table>
          <tr>
            <th class="t-col-num" width="20"></th>
            <th class="t-col-num" width="80">A</th>
            <th class="t-col-num" width="80">B</th>
          </tr>
          <tr>
            <th class="t-row-num" width="20">1</th>
            <th class="t-title" colspan="2"></th>
          </tr>
          <tr>
            <th class="t-row-num" width="20">2</th>
            <th class="t-row-title" width="80">A</th>
            <th class="t-row-title" width="80">B</th>
          </tr>
          <tr>
            <th class="t-row-num" width="20">3</th>
            <th class="t-row-title" width="80">列名1</th>
            <th class="t-row-title" width="80">列名2</th>
          </tr>
        </table>
      </div>
      <div class="cl_freeze" id="cl_freeze">
        <table>
          <tr>
            <td class="t-row-num" width="20">4</td>
            <td class="bordertop" width="80">1</td>
            <td class="bordertop" width="80">1</td>
          </tr>
          <tr>
            <td class="t-row-num" width="20">5</td>
            <td>2</td>
            <td>2</td>
          </tr>
          <tr>
            <td class="t-row-num" width="20">6</td>
            <td>3</td>
            <td>3</td>
          </tr>
          <tr>
            <td class="t-row-num" width="20">7</td>
            <td>4</td>
            <td>4</td>
          </tr>
          <tr>
            <td class="t-row-num" width="20">8</td>
            <td>5</td>
            <td>5</td>
          </tr>
          <tr>
            <td class="t-row-num" width="20">9</td>
            <td>6</td>
            <td>6</td>
          </tr>
          <tr>
            <td class="t-row-num" width="20">10</td>
            <td>7</td>
            <td>7</td>
          </tr>
          <tr>
            <td class="t-row-num" width="20">11</td>
            <td>8</td>
            <td>8</td>
          </tr>
          <tr>
            <td class="t-row-num" width="20">12</td>
            <td>9</td>
            <td>9</td>
          </tr>
          <tr>
            <td class="t-row-num" width="20">13</td>
            <td>10</td>
            <td>10</td>
          </tr>
          <tr>
            <td class="t-row-num" width="20">14</td>
            <td>11</td>
            <td>11</td>
          </tr>
          <tr>
            <td class="t-row-num" width="20">15</td>
            <td>12</td>
            <td>12</td>
          </tr>
          <tr>
            <td class="t-row-num" width="20">16</td>
            <td>13</td>
            <td>13</td>
          </tr>
          <tr>
            <td class="t-row-num" width="20">17</td>
            <td>14</td>
            <td>14</td>
          </tr>
          <tr>
            <td class="t-row-num" width="20">18</td>
            <td>15</td>
            <td>15</td>
          </tr>
          <tr>
            <td class="t-row-num" width="20">19</td>
            <td>16</td>
            <td>16</td>
          </tr>
          <tr>
            <td class="t-row-num" width="20">20</td>
            <td>17</td>
            <td>17</td>
          </tr>
          <tr>
            <td class="t-row-num" width="20">21</td>
            <td>18</td>
            <td>18</td>
          </tr>
          <tr>
            <td class="t-row-num" width="20">22</td>
            <td>19</td>
            <td>19</td>
          </tr>
          <tr>
            <td class="t-row-num" width="20">23</td>
            <td>20</td>
            <td>20</td>
          </tr>
        </table>
      </div>
    </div>
    <div class="t_r">
      <div class="t_r_t" id="t_r_t">
        <div class="t_r_title">
          <table>
            <tr>
              <th class="t-col-num" width="200">C</th>
              <th class="t-col-num" width="200">D</th>
              <th class="t-col-num" width="200">E</th>
              <th class="t-col-num" width="200">F</th>
              <th class="t-col-num" width="200">G</th>
              <th class="t-col-num" width="200">H</th>
            </tr>
            <tr>
              <th colspan="8" class="t-title">这里是标题内容</th>
            </tr>
            <tr>
              <th class="t-row-title" width="200">C</th>
              <th class="t-row-title" width="200">D</th>
              <th class="t-row-title" width="200">E</th>
              <th class="t-row-title" width="200">F</th>
              <th class="t-row-title" width="200">G</th>
              <th class="t-row-title" width="200">H</th>
            </tr>
            <tr>
              <th class="t-row-title" width="200">列名3</th>
              <th class="t-row-title" width="200">列名4</th>
              <th class="t-row-title" width="200">列名5</th>
              <th class="t-row-title" width="200">列名6</th>
              <th class="t-row-title" width="200">列名7</th>
              <th class="t-row-title" width="200">列名8</th>
            </tr>
          </table>
        </div>
      </div>
      <div class="t_r_content" id="t_r_content" οnscrοll="aa()">
        <table>
          <tr>
            <td width="200" class="bordertop">1</td>
            <td width="200" class="bordertop">1</td>
            <td width="200" class="bordertop">1</td>
            <td width="200" class="bordertop">1</td>
            <td width="200" class="bordertop">1</td>
            <td width="200" class="bordertop">1</td>
          </tr>
          <tr>
            <td>2</td>
            <td>2</td>
            <td>2</td>
            <td>2</td>
            <td>2</td>
            <td>2</td>
          </tr>
          <tr>
            <td>3</td>
            <td>3</td>
            <td>3</td>
            <td>3</td>
            <td>3</td>
            <td>3</td>
          </tr>
          <tr>
            <td>4</td>
            <td>4</td>
            <td>4</td>
            <td>4</td>
            <td>4</td>
            <td>4</td>
          </tr>
          <tr>
            <td>5</td>
            <td>5</td>
            <td>5</td>
            <td>5</td>
            <td>5</td>
            <td>5</td>
          </tr>
          <tr>
            <td>6</td>
            <td>6</td>
            <td>6</td>
            <td>6</td>
            <td>6</td>
            <td>6</td>
          </tr>
          <tr>
            <td>7</td>
            <td>7</td>
            <td>7</td>
            <td>7</td>
            <td>7</td>
            <td>7</td>
          </tr>
          <tr>
            <td>8</td>
            <td>8</td>
            <td>8</td>
            <td>8</td>
            <td>8</td>
            <td>8</td>
          </tr>
          <tr>
            <td>9</td>
            <td>9</td>
            <td>9</td>
            <td>9</td>
            <td>9</td>
            <td>9</td>
          </tr>
          <tr>
            <td>10</td>
            <td>10</td>
            <td>10</td>
            <td>10</td>
            <td>10</td>
            <td>10</td>
          </tr>
          <tr>
            <td>11</td>
            <td>11</td>
            <td>11</td>
            <td>11</td>
            <td>11</td>
            <td>11</td>
          </tr>
          <tr>
            <td>12</td>
            <td>12</td>
            <td>12</td>
            <td>12</td>
            <td>12</td>
            <td>12</td>
          </tr>
          <tr>
            <td>13</td>
            <td>13</td>
            <td>13</td>
            <td>13</td>
            <td>13</td>
            <td>13</td>
          </tr>
          <tr>
            <td>14</td>
            <td>14</td>
            <td>14</td>
            <td>14</td>
            <td>14</td>
            <td>14</td>
          </tr>
          <tr>
            <td>15</td>
            <td>15</td>
            <td>15</td>
            <td>15</td>
            <td>15</td>
            <td>15</td>
          </tr>
          <tr>
            <td>16</td>
            <td>16</td>
            <td>16</td>
            <td>16</td>
            <td>16</td>
            <td>16</td>
          </tr>
          <tr>
            <td>17</td>
            <td>17</td>
            <td>17</td>
            <td>17</td>
            <td>17</td>
            <td>17</td>
          </tr>
          <tr>
            <td>18</td>
            <td>18</td>
            <td>18</td>
            <td>18</td>
            <td>18</td>
            <td>18</td>
          </tr>
          <tr>
            <td>19</td>
            <td>19</td>
            <td>19</td>
            <td>19</td>
            <td>19</td>
            <td>19</td>
          </tr>
          <tr>
            <td>20</td>
            <td>20</td>
            <td>20</td>
            <td>20</td>
            <td>20</td>
            <td>20</td>
          </tr>
        </table>
      </div>
    </div>
  </div>
</div>

</body>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值