--- layout: doc title: JavaScript和Vue中实现表格(table)固定表头和首列 date: 2022-08-26 tags: - 编程 - 学习 - Html - JavaScript - vue - Blog head: - - meta - name: description content: 本文主要介绍关于`JS`或`Vue`中如何进行表头,列固定,可以根据实际应用场景应用于`原生`,`Vue`,`移动端`,`小程序`中 - - meta - name: keywords content: vue vue3 js javascript editLink: false lastUpdated: 2025-01-20T10:09:00 --- # {{ $frontmatter.title }} > :black_nib: 文章摘要 这篇文章介绍了如何在 JS 或 Vue 中实现表格的列和表头固定功能,适用于不同的开发环境(如原生 JavaScript、Vue、React、小程序等)。文章详细展示了实现这一功能的思路和具体步骤,包括使用 Vue3 和 TypeScript 结合 Less 来完成样式和功能的实现。 ## 写在前面 本文主要介绍关于`JS`或`Vue`中如何进行表头,列固定,可以根据实际应用场景应用于`原生`,`Vue`,`移动端`,`小程序`中 实际效果展示: ![在这里插入图片描述](../../../public/posts/2022/08/img-1.gif) ## 思路概述 `表头,列头,表格本身,这三个内容被分为了三块元素,将这三个内容进行抽离,并且通过定位和大盒子的包裹进行样式管理。` 【当要进行滚动时,只要对滚动事件进行绑定,让`表头和列头显示对应的内容就完成了滚动的操作`】 下面有`Vue`组件的和`JavaScript`原生的代码,可以直接运行查看逻辑和效果 ## 具体实现 整体代码,`可以直接创建组件,将代码复制到组件中使用`,在`App`中引用运行【基于`vue3+ts+less`实现,其他版本会在后面给出修改思路】 `【最下面也提供了原生写法】` ```html ``` 1. `html`部分:主要进行框架的设计,这里表头,列头,表格本体分为三份 ```html ``` 内容分为了三部分,这三部分将相互独立,通过样式的调节将三部分内容进行统一的管理。 这里使用的是`table`进行了内容的填充,因为表头和列头是单独的元素,所以可以使用其他内容如`div`等,通过样式上的和交互上的进行协调统一,这里不在赘述 2. 样式上的内容,因为主要是功能,这里样式使用`less`进行简单绘制 ```css ``` 内容上和定义的结构进行统一调节,这里需要主要的是: 因为表格的宽度和表头的宽度对应,表格的高度和列头的高度固定,所以建议在定义时考虑好对应的宽高对应关系,方便调节 在定义好表头和列头时,对与展示的部分通过外部的`div`进行定位的调节进行展示,内部的表格部分通过宽度的固定来达到样式统一,使用相对定位来完成展示内容的切换 内部使用了Vue3提供的`v-bind`,如果你使用的时vue2或其他内容请更换为内联样式或其他方式 `v-bind` 为Vue3中提供,主要是将绑定的内容转换为自定义标签使用,具体介绍可以看我的另一篇文章:[Vue3新属性 — v-bind in css](https://blog.csdn.net/weixin_52235488/article/details/126290046?spm=1001.2014.3001.5502) ,里面有用法和原理的详细介绍 3. 逻辑部分:主要为内部的真正的表格绑定了滚动的监听, ```html ``` 这里使用的动态数据在`v-bind`中进行,这里直接修改即可 ## 其他环境中要修改的内容 这里对常见问题进行解决,如果没有匹配,请评论或找其他方式解决 1. `原生JavaScript中使用`:如果你完全没有使用过`Vue`,上面的代码我也改成了原生的版本,逻辑一样,这里就只放代码不做介绍了 `直接创建文件复制使用` ```html Title
``` 主要通过的是JS的元素创建然后将元素添加至对应的内容中,然后进行事件的绑定,从而完成整体逻辑 2. `React`和`小程序中`,二者都是可以进行数据的绑定,元素的循环处理更加方法,小程序中没有鼠标,可能要更换为手指滑动操作,对于这个逻辑相同, `绑定元素的移动距离`,从而让表头和列头跟随移动从而达到同步的效果和目的