前言

最近在做vue移动端项目,需要做一个可以固定表头首列的表格,而且由于一些原因不能使用任何UI插件,网上找了很久也没什么好方法,所以在解决了问题之后,写下了这篇文章供后来人参考,文章有什么错漏的问题欢迎评论交流。

效果

思路

要实现固定首行首列

除了使用各种UI框架插件外,那就是自己用原生写啦

首先我们理一下思路

如何固定首行首列呢?

可能每个人有不同的想法

我这里当然介绍的是我自己的想法

那就是把首列表头和表格主内容分割开来,如下图

不过这样虽然固定了表头首列

但还是不能实现我们想要的效果

因为你会发现当你滑动tbody的时候

表头和首列并不会移动

相信聪明的你已经有了解决的办法了

那就是给tbody添加一个滑动监听

滑动的时候会触发事件

引起表头和首列的移动

这就是本文固定表头首列的思路

代码实现

template:

<template>
<div class="pages" ref="pages">
<div class = "content" ref="table">
<!--首列固定-->
<div class = "left-content">
<div class = "table-head">
<table class= "full-table">
<thead>
<tr v-for = "header in tableHeader">
<th class = "firstCol"
v-for = "(b,index) in header"
v-if="index==0">
<p>{{b}}</p>
</th>
</tr>
</thead>
</table>
</div>
<div class="table-left">
<div class = "table"
ref="firstColLayer"
data-_ref="firstColLayer"
>
<table class= "full-table">
<tbody>
<tr v-for="row in dataSheet">
<td v-for="(c,index) in row" v-if="index==0">
<p>{{c}}</p>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class = "right-content" ref="right">
<!--首行固定-->
<div class = "table-head"
ref="firstRowLayer"
data-_ref="firstRowLayer">
<table class= "full-table">
<thead>
<tr v-for = "header in tableHeader">
<th
v-for = "(b,index) in header"
v-if="index!=0 && index!=1"
style="width:101px"
>
<p>{{b}}</p>
</th>
</tr>
</thead>
</table>
</div>
<!--正常表格内容(只有表格内容,没有表头和首列)-->
<div class="table"
style="overflow:scroll"
ref="tableContainer"
@scroll="tableDivScroll($event)"
>
<table class="content-table">
<tbody ref="tbody">
<tr v-for="row in dataSheet">
<td v-for="(c,index) in row"
v-if="index!=0 && index!=1"
>
<p>{{c}}</p>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</template>

JavaScript:

<script>
module.exports = (function(that) {
return {
data: function(that) {
const tableHeader = that.dataSheet;
const dataSheet = that.dataSheet;
return {
dataSheet: dataSheet,
tableHeader: tableHeader,
};
},
methods: {
tableDivScroll (event) {
const $target = this.$refs.tableContainer
// 首行固定
this.$refs.firstRowLayer.scrollLeft = $target.scrollLeft
// 首列固定
this.$refs.firstColLayer.scrollTop = $target.scrollTop
},
//定一个生命周期钩子监听变动
mounted:function () {
let maxHeight = window.screen.height
document.body.style.overflow='hidden';
this.$refs.right.style.width=""+this.$refs.table.offsetWidth-107+"px";//这里的减107是减去左侧div宽度
console.log(this.placeholderTop)
}
}
})(this);
</script>

CSS:

<style scoped>
body{
overflow:hidden
}
.pages{
height:100%;
overflow:hidden;
}
.content{
margin-top:73px;
margin-left:17px;
width:100%;
}
.left-content{
width:101px;
float:left;
}
.right-content{
float:left
}
.table-body{
width:100%;
overflow:auto;
}
.table-head{
width:100%;
overflow:hidden;
}
.left-content .table-body{
overflow:hidden;
}
.table-left .table{
height:400px;
background-color:#FFFFFF;
overflow:hidden;
margin-right:0;
padding-right:0;
}
table::-webkit-scrollbar{display:none}
.content-table th, .full-table th{
font-size:14px;
font-family:PingFangSC-Regular;
background:#EAEFF3;
font-weight:400;
color:#176BED;
height:40px;
line-height:40px;
text-align:center;
}
.content-table td, .full-table td {
line-height: 35px;
text-align: center;
word-wrap: break-word;
word-wrap: normal\0;
overflow: hidden;
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
}
th,td p{
width:101px;
display: inline-block;
line-height:14px;
padding:auto 0;
margin:auto 0;
vertical-align: middle;
}
.content-table {
display:block;
background-color:#FFFFFF;
}
thead,tbody{
background-color:#FFFFFF;
}
</style>

Ps:有什么问题可以在评论区一起探讨

vue表格实现固定表头首列的更多相关文章

  1. vue 表格树 固定表头

    参考网上黄龙的表格树进行完善,并添加固定表头等的功能,目前是在iview的项目中实现,如果想在element中实现的话修改对应的元素标签及相关写法即可. <!-- @events @on-row ...

  2. jquery固定表头和列头

    1.对网上的开源方法稍作了些修改 <script type="text/javascript">// <![CDATA[ function FixTable(Ta ...

  3. html table 固定表头和列

    /**************************************************************** jQuery 插件. 功能: 固定表格标题行或列头 Version: ...

  4. Saiku如何固定查询结果table的表头和首列

    在使用saiku查询的时候,当“行”和“列”的维度内容过多时,在查看时只看到数据,不知道是什么数据,维度不清楚,得来回拖动滚动条才行,所以同事提出想要固定“表头”和“首列”. 在网上找了一些现成的插件 ...

  5. bootstrap-table固定表头固定列

    1.引入 bootstrap依赖于jquery bootstrap-table依赖于bootstrap,所以都需要引入 2. bootstrap-table有两种方式,html.js <tabl ...

  6. bootstrap 冻结表格,冻结表头

    需要的文件下载: bootstrap-table:https://github.com/wenzhixin/bootstrap-table bootstrap-table-fiex-column:ht ...

  7. asp.net table表格表头及列固定实现

    http://blog.csdn.net/zdw_wym/article/details/48630337 在开发中常会遇到table表格中列特别多,下拉后,表头就看不见了,水平滚动后,第1.2列就看 ...

  8. H5手机开发锁定表头和首列(惯性滚动)解决方案

    前端时间移动端在做表格的时候需要这个功能,由于还有实现类似原生的惯性滚动功能,于是使用了iscroll插件. iscroll插件下载地址:iscroll5 该功能demo github地址: http ...

  9. CSS样式实现表头和列固定

    效果图:第一行和第一列固定       <!DOCTYPE html> <html lang="zh"> <head> <meta cha ...

随机推荐

  1. mysql学习 第二章 数据库的基本操作

    3.1   创建数据库 MySQL安装好之后,首先需要创建数据库,这是使用MySQL各种功能的前提.本章将详细介绍数据的基本操作,主要内容包括:创建数据库.删除数据库.不同类型的数据存储引擎和存储引擎 ...

  2. 第三次 orm自动建表及遇到的问题

    Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 方法很简单,在hibernate.cfg.xml内加入 <property name="hi ...

  3. 强大的测试管理工具---TestTrack Pro

    我的一篇老文章了,当年可能是第一篇介绍.从CSDN搬来的. 版权声明:本文为博主原创文章,未经博主允许不得转载. 强大的测试管理工具---TestTrack Pro 时间:2004-03-09 简介: ...

  4. RabbitMQ入门:认识并安装RabbitMQ(以Windows系统为例)

    最近在学习Spring Cloud,其中消息总线Spring Cloud Bus是必不可少的,但是Spring Cloud Bus目前只支持RabbitMQ和kafka,因此学习RabbitMQ势在必 ...

  5. YII框架CGridView分页实现

    C控制器层 $model = new User('search'); $model->unsetAttributes(); $dataProvider = $model->search() ...

  6. Docker for Windows 使用 VMware WorkStation

    一.前言 Docker for Windows 不同于 Docker Toolbox.Docker for Windows 对系统的要求至少为Windows 10专业版,因为它需要Hyper-V的支持 ...

  7. JavaScript的数据类型问题总结

    一    JS中有哪些数据类型? -- 共 6 种数据类型,其中 5 种基本数据类型Undefined,Null,Boolean,Number和 String,1 种复杂数据类型Object.因为EC ...

  8. centos网络配置方法(手动设置,自动获取)

    不知道为什么最近一段时间网络特别的慢,还老是断,断的时候,局域网都连不上,当我手动设置一下ip后就可以了,搞得我很无语.下面是2种设置网络连接的方法,在说怎么设置前,一定要做好备份工作,特别是对于新手 ...

  9. python教你用微信每天给女朋友说晚安

    但凡一件事,稍微有些重复.我就考虑怎么样用程序来实现它. 这里给各位程序员朋友分享如何每天给朋友定时微信发送"晚安",故事,新闻,等等··· ···最好运行在服务器上,这样后台挂起 ...

  10. (一)Servlet简介

    相关名词解释 HTML:Hyper Text Markup Language,超文本标记语言 HTTP:Hyper Text Transfer Protocol,超文本传输协议 URL:Uniform ...