JS实现的表头列头固定页面功能示例

以下是“JS实现的表头列头固定页面功能示例”的完整攻略:

1. 准备工作

在使用JS实现表头列头固定功能之前,需要先对页面进行一些准备工作。首先,你需要在你的HTML文件中将表格封装在一个div盒子中,如下所示:

<div class="table-container">
  <table>
    <!--表格内容-->
  </table>
</div>

接下来,需要在CSS文件中对该div盒子进行设置,使其具有固定的宽度和高度,并且具有滚动条的效果,如下所示:

.table-container {
  width: 100%;
  height: 300px;
  overflow: auto;
}

2. 实现表头固定

在HTML文件中,表头是由<thead>标签表示的,该标签中包含了表头的各个列。我们可以通过JS代码将<thead>中的内容固定在页面的顶部,实现表头固定的效果。

首先,需要使用JS获取到<thead>标签的位置信息以及表格的宽度信息,如下所示:

let tableHeader = document.querySelector('thead');
let tableRect = document.querySelector('table').getBoundingClientRect();

然后,我们可以将<thead>标签在页面中进行固定,使其始终处于页面的顶部位置,如下所示:

window.addEventListener('scroll', function() {
  if (window.scrollY >= tableRect.top) {
    tableHeader.style.position = 'fixed';
    tableHeader.style.top = '0';
    tableHeader.style.left = tableRect.left + "px";
    tableHeader.style.width = tableRect.width + "px";
  } else {
    tableHeader.style.position = 'static';
  }
});

其中,window.addEventListener代码块表示当页面发生滚动事件时,执行内部的函数代码块,该函数会判断当前滚动的位置是否超过了<thead>标签所在的位置,如果滚动位置超过了则将<thead>标签设置为固定定位,并设置其位置、宽度等CSS属性值;如果滚动位置未超过则将<thead>标签恢复为默认的静态定位。

3. 实现列头固定

和表头固定类似,实现列头固定的过程也是通过JS代码来实现的。不同的是,列头是由每一个<th>标签表示的,我们需要对每一个<th>标签进行固定。

首先,需要在每个<th>标签上添加一个额外的div,将<th>中的内容进行封装,如下所示:

<thead>
  <tr>
    <th><div>名称</div></th>
    <th><div>价格</div></th>
    <th><div>库存</div></th>
    <!--其他列-->
  </tr>
</thead>

然后,需要对每个<th>标签上的div进行定位,使其始终出现在页面的左侧位置,如下所示:

let tableHeaders = document.querySelectorAll('thead th');
let tableContainer = document.querySelector('.table-container');

for (let i = 0; i < tableHeaders.length; i++) {
  let div = tableHeaders[i].querySelector('div');
  div.style.position = 'absolute';
  div.style.top = '0';
  div.style.left = tableHeaders[i].getBoundingClientRect().left
                - tableRect.left + "px";
}

其中,document.querySelectorAll代码块表示获取到所有的<th>标签,在遍历时对每个<th>标签中额外添加的div进行设置CSS属性值。为了实现div的固定定位效果,我们需要设置其position属性为absolute,并且通过getBoundingClientRect()方法获取该<th>标签的位置信息,计算出div的left值,使其始终位于页面的左侧。

4. 示例说明

示例1:西游记人物表格

<div class="table-container">
  <table>
    <thead>
      <tr>
        <th><div>姓名</div></th>
        <th><div>性别</div></th>
        <th><div>技能</div></th>
        <th><div>战力</div></th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td><div>孙悟空</div></td>
        <td><div>男</div></td>
        <td><div>七十二变,筋斗云</div></td>
        <td><div>8888</div></td>
      </tr>
      <!--其他行-->
    </tbody>
  </table>
</div>
.table-container {
  width: 100%;
  height: 300px;
  overflow: auto;
}
let tableHeader = document.querySelector('thead');
let tableHeaders = document.querySelectorAll('thead th');
let tableRect = document.querySelector('table').getBoundingClientRect();
let tableContainer = document.querySelector('.table-container');

window.addEventListener('scroll', function() {
  if (window.scrollY >= tableRect.top) {
    tableHeader.style.position = 'fixed';
    tableHeader.style.top = '0';
    tableHeader.style.left = tableRect.left + "px";
    tableHeader.style.width = tableRect.width + "px";
  } else {
    tableHeader.style.position = 'static';
  }

  for (let i = 0; i < tableHeaders.length; i++) {
    let div = tableHeaders[i].querySelector('div');
    div.style.position = 'absolute';
    div.style.top = '0';
    div.style.left = tableHeaders[i].getBoundingClientRect().left
                  - tableRect.left + "px";
  }
});

在该示例中,我们通过实现表头列头固定功能,将人物表格的表头和列头始终显示在页面上,方便用户查看数据。

示例2:车站时刻表

<div class="table-container">
  <table>
    <thead>
      <tr>
        <th><div>车次</div></th>
        <th><div>出发站</div></th>
        <th><div>到达站</div></th>
        <th><div>发车时间</div></th>
        <th><div>到达时间</div></th>
        <th><div>历时</div></th>
        <th><div>票价</div></th>
        <th><div>数量</div></th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td><div>G2</div></td>
        <td><div>北京南</div></td>
        <td><div>上海虹桥</div></td>
        <td><div>08:00</div></td>
        <td><div>14:00</div></td>
        <td><div>6小时</div></td>
        <td><div>¥553</div></td>
        <td><div>12张</div></td>
      </tr>
      <!--其他行-->
    </tbody>
  </table>
</div>
.table-container {
  width: 100%;
  height: 400px;
  overflow: auto;
}
let tableHeader = document.querySelector('thead');
let tableHeaders = document.querySelectorAll('thead th');
let tableRect = document.querySelector('table').getBoundingClientRect();
let tableContainer = document.querySelector('.table-container');

window.addEventListener('scroll', function() {
  if (window.scrollY >= tableRect.top) {
    tableHeader.style.position = 'fixed';
    tableHeader.style.top = '0';
    tableHeader.style.left = tableRect.left + "px";
    tableHeader.style.width = tableRect.width + "px";
  } else {
    tableHeader.style.position = 'static';
  }

  for (let i = 0; i < tableHeaders.length; i++) {
    let div = tableHeaders[i].querySelector('div');
    div.style.position = 'absolute';
    div.style.top = '0';
    div.style.left = tableHeaders[i].getBoundingClientRect().left
                  - tableRect.left + "px";
  }
});

在该示例中,我们通过实现表头列头固定功能,将车站时刻表的表头和列头始终显示在页面上,方便用户查看数据。当时刻表数据较多时,用户可以通过滚动表格来浏览所有的数据,而不会失去表头和列头的信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现的表头列头固定页面功能示例 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • jQuery使用each遍历循环的方法

    jQuery是一款流行的JavaScript库,可以简化JavaScript的编程过程,并提高开发效率。在jQuery中,使用each方法可以遍历循环数组、对象或类数组对象中的元素,并执行对应的操作。 以下是使用jQuery each方法的完整攻略: 1. 基本语法 $.each(array, function(index, value){ // 对每个元素…

    jquery 2023年5月28日
    00
  • jQWidgets jqxScheduler touchDayNameFormat属性

    jQWidgets jqxScheduler是一个优秀的JavaScript组件库,用于实现日程安排和资源调度等功能。其中,touchDayNameFormat是jqxScheduler中一个重要的属性,用于定义在移动设备上显示日程时,日期名称的格式。本篇攻略将详细讲解该属性的用法和示例。 属性定义 touchDayNameFormat属性用于控制在移动设备…

    jquery 2023年5月11日
    00
  • jQWidgets jqxPivotGrid refresh() 方法

    以下是关于 jQWidgets jqxPivotGrid 组件中 refresh() 方法的详细攻略。 jQWidgets jqxPivotGrid refresh() 方法 jQWidgets jqxPivotGrid 组件的 refresh() 方法用于刷新数据透视表的内容。该方法可以用于在数据透视表的数据发生变化时,重新加载数据并刷新表格。 语法 $(…

    jquery 2023年5月12日
    00
  • 如何在jQuery中添加和删除多个类

    在jQuery中添加和删除多个类是非常常见的需求。下面是详细的攻略: 添加多个类 在jQuery中,我们可以使用 addClass 方法一次性添加多个类。这个方法接受一个参数,参数是要添加的类名,可以是一个字符串或者以空格分隔的多个字符串。 假设我们有一个div元素,需要添加两个类名,分别是foo和bar。我们可以这样写: $( "div&quot…

    jquery 2023年5月13日
    00
  • jquery 正整数数字校验正则表达式

    下面是详细讲解”jquery 正整数数字校验正则表达式”的完整攻略。 什么是正则表达式? 正则表达式是一种通过字符匹配来进行字符串匹配的方法。正则表达式使用了一些特殊字符和字符类来识别字符串模式,可以有效地进行数据校验。 jquery 正整数数字校验正则表达式 下面是一个简单的正则表达式,用于校验正整数数字: /^[1-9]\d*$/ 其中: /^ 表示以什…

    jquery 2023年5月28日
    00
  • jQWidgets jqxScheduler appointmentDoubleClick事件

    jQWidgets是一款jQuery插件,它提供了丰富多样的UI组件。其中,jqxScheduler是jQWidgets里面的一款强大的调度器控件,它可以帮助我们进行日程的管理、预定等操作。jqxScheduler有很多事件,包括appointmentDoubleClick事件,通过该事件我们可以实现双击日程条目弹出对应的模态框等操作。 下面是详细的攻略: …

    jquery 2023年5月11日
    00
  • jQWidgets jqxKnob dragEndAngle 属性

    jQWidgets jqxKnob dragEndAngle 属性攻略 jQWidgets 是一个基于 jQuery 的 UI 组件库,提供了丰富的 UI 组件工具,可于创建现代化 Web 应用程序。 jqxKnob旋钮,用于可视化调整数值。攻略将详细介绍 jqxKnob 的 dragEndAngle 属性,该属性用于设置旋钮的结束角度。 dragEndAn…

    jquery 2023年5月10日
    00
  • JavaScript正则获取地址栏中参数的方法

    如果要获取地址栏中的参数,可以使用JavaScript正则表达式来实现。以下是获取地址栏中参数的方法的完整攻略: 第一步:获取完整URL 使用window.location.href可以获取完整URL。 示例代码: var url = window.location.href; console.log(url); // https://www.example…

    jquery 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部