【Web】双表头固定,内容可滚动的Table实现

效果描述

table 有横向和纵向两个表头。其数据可以随滚动条滚动。
横向滚动条移动时,左侧纵表头保持不动,上侧横向表头跟随移动;
纵向滚动条移动时,上侧横表头保持不动,左侧纵向表头跟随移动;

动态效果图

of

实现原理

4 个 div + 绝对定位(absolute) + JS的onscroll 事件监听

源码
<!DOCTYPE html>
<html lang="en">
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<style>
    table {
        /*margin: auto;*/
        /*width: 80%;*/
        border-collapse: collapse;
    }

    td {
        border: solid 1px #000;
        width: 100px;
        height: 20px;
        text-align: center;
    }

    thead {
        background-color: #888888;
        border: black;
        text-align: center;
    }


    /*左上角固定*/
    #div1 {
        position: fixed;
        height: 20px;
        width: 200px;
    }

    #tb1 {

    }


    /*横向表头 纵向固定 横向跟随滚动*/
    #div2 {
        position: absolute;
        height: 20px;
        width: 1400px;
        margin-left: 200px;

        overflow: hidden;
    }

    #tb2 {
        width: 2000px;
        position: absolute;
    }

    /*纵向表头 横向固定 纵向跟随滚动*/
    #div3 {
        position: absolute;
        height: 200px;
        width: 200px;
        margin-top: 20px;
        overflow-y: hidden;
    }

    #tb3 {
        height: 200px;
        position: absolute;
    }


    #div4 {
        position: absolute;
        /*height: 200px;*/
        /*width: 1400px;*/
        height: 217px;
        width: 1417px;
        margin-top: 20px;
        margin-left: 200px;

        overflow: auto;
    }

    #tb4 {
        width: 2000px;
        height: 200px;
    }

    /*滚动条样式*/
    div::-webkit-scrollbar {
        width: 17px; /*垂直滚动条的宽度*/
        height: 17px; /*水平滚动条的宽度*/
    }

    /*滑块样式*/
    div::-webkit-scrollbar-thumb {
        border-radius: 5px;
        -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
        background: bisque;
    }

    /*轨道样式*/
    div::-webkit-scrollbar-track {
        border-radius: 0;
        -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
        background: aquamarine;
    }

</style>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id="div1">
    <table id="tb1">
        <thead>
        <tr>
            <td>固定</td>
            <td>固定</td>
        </tr>
        </thead>
    </table>
</div>
<div id="div2">
    <table id="tb2">
        <thead>
        <tr>
            <td>纵向固定1</td>
            <td>纵向固定2</td>
            <td>纵向固定3</td>
            <td>纵向固定4</td>
            <td>纵向固定5</td>
            <td>纵向固定6</td>
            <td>纵向固定7</td>
            <td>纵向固定8</td>
            <td>纵向固定9</td>
            <td>纵向固定10</td>
            <td>纵向固定11</td>
            <td>纵向固定12</td>
            <td>纵向固定13</td>
            <td>纵向固定14</td>
            <td>纵向固定15</td>
            <td>纵向固定16</td>
            <td>纵向固定17</td>
        </tr>
        </thead>
    </table>
</div>
<div id="div3">
    <table id="tb3">
        <thead>
        <tr>
            <td>横向固定1</td>
            <td>横向固定1</td>
        </tr>
        <tr>
            <td>横向固定2</td>
            <td>横向固定2</td>
        </tr>
        <tr>
            <td>横向固定3</td>
            <td>横向固定3</td>
        </tr>
        <tr>
            <td>横向固定4</td>
            <td>横向固定4</td>
        </tr>
        <tr>
            <td>横向固定5</td>
            <td>横向固定5</td>
        </tr>
        <tr>
            <td>横向固定6</td>
            <td>横向固定6</td>
        </tr>
        <tr>
            <td>横向固定7</td>
            <td>横向固定7</td>
        </tr>
        <tr>
            <td>横向固定8</td>
            <td>横向固定8</td>
        </tr>
        <tr>
            <td>横向固定9</td>
            <td>横向固定9</td>
        </tr>
        <tr>
            <td>横向固定10</td>
            <td>横向固定10</td>
        </tr>
        <tr>
            <td>横向固定11</td>
            <td>横向固定11</td>
        </tr>
        <tr>
            <td>横向固定12</td>
            <td>横向固定12</td>
        </tr>
        <tr>
            <td>横向固定13</td>
            <td>横向固定13</td>
        </tr>
        <tr>
            <td>横向固定13</td>
            <td>横向固定13</td>
        </tr>
        <tr>
            <td>横向固定14</td>
            <td>横向固定14</td>
        </tr>
        <tr>
            <td>横向固定15</td>
            <td>横向固定15</td>
        </tr>
        <tr>
            <td>横向固定16</td>
            <td>横向固定16</td>
        </tr>
        </thead>
    </table>
</div>
<div id="div4">
    <table id="tb4">
        <tr>
            <td>数据1</td>
            <td>数据2</td>
            <td>数据3</td>
            <td>数据4</td>
            <td>数据5</td>
            <td>数据6</td>
            <td>数据7</td>
            <td>数据8</td>
            <td>数据9</td>
            <td>数据10</td>
            <td>数据11</td>
            <td>数据12</td>
            <td>数据13</td>
            <td>数据14</td>
            <td>数据15</td>
            <td>数据16</td>
            <td>数据17</td>
        </tr>
        <tr>
            <td>数据1</td>
            <td>数据2</td>
            <td>数据3</td>
            <td>数据4</td>
            <td>数据5</td>
            <td>数据6</td>
            <td>数据7</td>
            <td>数据8</td>
            <td>数据9</td>
            <td>数据10</td>
            <td>数据11</td>
            <td>数据12</td>
            <td>数据13</td>
            <td>数据14</td>
            <td>数据15</td>
            <td>数据16</td>
            <td>数据17</td>
        </tr>
        <tr>
            <td>数据1</td>
            <td>数据2</td>
            <td>数据3</td>
            <td>数据4</td>
            <td>数据5</td>
            <td>数据6</td>
            <td>数据7</td>
            <td>数据8</td>
            <td>数据9</td>
            <td>数据10</td>
            <td>数据11</td>
            <td>数据12</td>
            <td>数据13</td>
            <td>数据14</td>
            <td>数据15</td>
            <td>数据16</td>
            <td>数据17</td>
        </tr>
        <tr>
            <td>数据1</td>
            <td>数据2</td>
            <td>数据3</td>
            <td>数据4</td>
            <td>数据5</td>
            <td>数据6</td>
            <td>数据7</td>
            <td>数据8</td>
            <td>数据9</td>
            <td>数据10</td>
            <td>数据11</td>
            <td>数据12</td>
            <td>数据13</td>
            <td>数据14</td>
            <td>数据15</td>
            <td>数据16</td>
            <td>数据17</td>
        </tr>
        <tr>
            <td>数据1</td>
            <td>数据2</td>
            <td>数据3</td>
            <td>数据4</td>
            <td>数据5</td>
            <td>数据6</td>
            <td>数据7</td>
            <td>数据8</td>
            <td>数据9</td>
            <td>数据10</td>
            <td>数据11</td>
            <td>数据12</td>
            <td>数据13</td>
            <td>数据14</td>
            <td>数据15</td>
            <td>数据16</td>
            <td>数据17</td>
        </tr>
        <tr>
            <td>数据1</td>
            <td>数据2</td>
            <td>数据3</td>
            <td>数据4</td>
            <td>数据5</td>
            <td>数据6</td>
            <td>数据7</td>
            <td>数据8</td>
            <td>数据9</td>
            <td>数据10</td>
            <td>数据11</td>
            <td>数据12</td>
            <td>数据13</td>
            <td>数据14</td>
            <td>数据15</td>
            <td>数据16</td>
            <td>数据17</td>
        </tr>
        <tr>
            <td>数据1</td>
            <td>数据2</td>
            <td>数据3</td>
            <td>数据4</td>
            <td>数据5</td>
            <td>数据6</td>
            <td>数据7</td>
            <td>数据8</td>
            <td>数据9</td>
            <td>数据10</td>
            <td>数据11</td>
            <td>数据12</td>
            <td>数据13</td>
            <td>数据14</td>
            <td>数据15</td>
            <td>数据16</td>
            <td>数据17</td>
        </tr>
        <tr>
            <td>数据1</td>
            <td>数据2</td>
            <td>数据3</td>
            <td>数据4</td>
            <td>数据5</td>
            <td>数据6</td>
            <td>数据7</td>
            <td>数据8</td>
            <td>数据9</td>
            <td>数据10</td>
            <td>数据11</td>
            <td>数据12</td>
            <td>数据13</td>
            <td>数据14</td>
            <td>数据15</td>
            <td>数据16</td>
            <td>数据17</td>
        </tr>
        <tr>
            <td>数据1</td>
            <td>数据2</td>
            <td>数据3</td>
            <td>数据4</td>
            <td>数据5</td>
            <td>数据6</td>
            <td>数据7</td>
            <td>数据8</td>
            <td>数据9</td>
            <td>数据10</td>
            <td>数据11</td>
            <td>数据12</td>
            <td>数据13</td>
            <td>数据14</td>
            <td>数据15</td>
            <td>数据16</td>
            <td>数据17</td>
        </tr>
        <tr>
            <td>数据1</td>
            <td>数据2</td>
            <td>数据3</td>
            <td>数据4</td>
            <td>数据5</td>
            <td>数据6</td>
            <td>数据7</td>
            <td>数据8</td>
            <td>数据9</td>
            <td>数据10</td>
            <td>数据11</td>
            <td>数据12</td>
            <td>数据13</td>
            <td>数据14</td>
            <td>数据15</td>
            <td>数据16</td>
            <td>数据17</td>
        </tr>
        <tr>
            <td>数据1</td>
            <td>数据2</td>
            <td>数据3</td>
            <td>数据4</td>
            <td>数据5</td>
            <td>数据6</td>
            <td>数据7</td>
            <td>数据8</td>
            <td>数据9</td>
            <td>数据10</td>
            <td>数据11</td>
            <td>数据12</td>
            <td>数据13</td>
            <td>数据14</td>
            <td>数据15</td>
            <td>数据16</td>
            <td>数据17</td>
        </tr>
        <tr>
            <td>数据1</td>
            <td>数据2</td>
            <td>数据3</td>
            <td>数据4</td>
            <td>数据5</td>
            <td>数据6</td>
            <td>数据7</td>
            <td>数据8</td>
            <td>数据9</td>
            <td>数据10</td>
            <td>数据11</td>
            <td>数据12</td>
            <td>数据13</td>
            <td>数据14</td>
            <td>数据15</td>
            <td>数据16</td>
            <td>数据17</td>
        </tr>
        <tr>
            <td>数据1</td>
            <td>数据2</td>
            <td>数据3</td>
            <td>数据4</td>
            <td>数据5</td>
            <td>数据6</td>
            <td>数据7</td>
            <td>数据8</td>
            <td>数据9</td>
            <td>数据10</td>
            <td>数据11</td>
            <td>数据12</td>
            <td>数据13</td>
            <td>数据14</td>
            <td>数据15</td>
            <td>数据16</td>
            <td>数据17</td>
        </tr>
        <tr>
            <td>数据1</td>
            <td>数据2</td>
            <td>数据3</td>
            <td>数据4</td>
            <td>数据5</td>
            <td>数据6</td>
            <td>数据7</td>
            <td>数据8</td>
            <td>数据9</td>
            <td>数据10</td>
            <td>数据11</td>
            <td>数据12</td>
            <td>数据13</td>
            <td>数据14</td>
            <td>数据15</td>
            <td>数据16</td>
            <td>数据17</td>
        </tr>
        <tr>
            <td>数据1</td>
            <td>数据2</td>
            <td>数据3</td>
            <td>数据4</td>
            <td>数据5</td>
            <td>数据6</td>
            <td>数据7</td>
            <td>数据8</td>
            <td>数据9</td>
            <td>数据10</td>
            <td>数据11</td>
            <td>数据12</td>
            <td>数据13</td>
            <td>数据14</td>
            <td>数据15</td>
            <td>数据16</td>
            <td>数据17</td>
        </tr>
        <tr>
            <td>数据1</td>
            <td>数据2</td>
            <td>数据3</td>
            <td>数据4</td>
            <td>数据5</td>
            <td>数据6</td>
            <td>数据7</td>
            <td>数据8</td>
            <td>数据9</td>
            <td>数据10</td>
            <td>数据11</td>
            <td>数据12</td>
            <td>数据13</td>
            <td>数据14</td>
            <td>数据15</td>
            <td>数据16</td>
            <td>数据17</td>
        </tr>
        <tr>
            <td>数据1</td>
            <td>数据2</td>
            <td>数据3</td>
            <td>数据4</td>
            <td>数据5</td>
            <td>数据6</td>
            <td>数据7</td>
            <td>数据8</td>
            <td>数据9</td>
            <td>数据10</td>
            <td>数据11</td>
            <td>数据12</td>
            <td>数据13</td>
            <td>数据14</td>
            <td>数据15</td>
            <td>数据16</td>
            <td>数据17</td>
        </tr>
    </table>
</div>
<script>

    var div4 = $("#div4").get(0);
    var tb2 = $("#tb2").get(0);
    var tb3 = $("#tb3").get(0);

    div4.onscroll = function () {
        tb2.style.left = div4.scrollLeft * -1 + 'px'
        tb3.style.top = div4.scrollTop * -1 + 'px';
    }

</script>
</body>
</html>

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在MongoDB中,可以使用聚合查询和嵌入式文档的方式来实现表查询。在聚合查询中,可以使用$lookup操作符来进行多表关联查询。$lookup操作符可以在一个集合中查找匹配条件的记录,并将其与另一个集合中的记录关联起来。 首先,你需要使用$lookup操作符指定要关联的集合和关联条件。例如,如果你有两个集合A和B,你可以使用以下代码进行关联查询: ``` db.A.aggregate([ { $lookup: { from: "B", localField: "fieldA", foreignField: "fieldB", as: "result" } } ]) ``` 这个查询将在集合A中的fieldA字段和集合B中的fieldB字段之间进行匹配,并将匹配的记录作为嵌入式文档添加到A的每个记录中的result字段中。 另一种实现表查询的方式是使用嵌入式文档。在MongoDB中,你可以在一个集合中嵌入另一个集合的记录。例如,如果你有两个集合A和B,你可以将B的记录嵌入到A的记录中。这样,当你查询A集合时,可以同时获取A和B的数据。 这里是一个示例代码: ``` db.A.find().forEach(function(doc) { var b = db.B.findOne({ _id: doc.bId }); doc.b = b; printjson(doc); }); ``` 这段代码将遍历A集合中的每个记录,并使用B集合中与之相关联的记录更新每个A记录中的b字段。 总结起来,MongoDB可以使用聚合查询和嵌入式文档的方式实现表查询。聚合查询使用$lookup操作符进行关联查询,而嵌入式文档则将一个集合的记录嵌入到另一个集合的记录中。根据具体的需求和数据结构,你可以选择适合的方式来实现表查询。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [java mongodb 多表关联查询,多条件查询,分页,排序](https://blog.csdn.net/seesun2012/article/details/105165495)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [MongoDB 多表连接查询](https://blog.csdn.net/weixin_39653761/article/details/113432062)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HolaSecurity

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值