html表格标题移动,vue-移动端实现固定表格首列和表头

移动端实现固定表格首列和表头(vue)

因为移动端项目需求要实现一个可以固定表格首列和表头的表格,但是移动端对表格需求很少,用的组件库中也没有设计这个组件,也不能用插件,所以只能自己写一个。语言是vue。

基本思想:把首列和表头和主体表格分开;然后给tbody添加一个滑动监听,滑动的时候,触发事件让表头和首列固定就可以。

但是注意的是,高度和宽度必须都要统一设置好,不然会出现表格不对齐的问题。

实现效果:

9945827e467e

111.gif

代码实现:(vue主体部分)

ref="pages"

class="pages"

>

ref="table"

class="content1"

>

v-for="(header,index) in tableHeader"

:key="index"

>

v-for="(b,x) in header"

v-show="x===0"

:key="x"

>

{{ b }}

ref="firstColLayer"

class="table"

data-_ref="firstColLayer"

>

v-for="(row,index) in dataSheet"

:key="index"

>

v-for="(c,y) in row"

v-show="y===0"

:key="y"

>

{{ c }}

ref="right"

class="right-content"

>

ref="firstRowLayer"

class="table-head"

data-_ref="firstRowLayer"

>

v-for="(header,index) in tableHeader"

:key="index"

>

v-for="(b,n) in header"

v-show="n!==0"

:key="n"

>

{{ b }}

ref="tableContainer"

class="table"

style="overflow:scroll"

@scroll="tableDivScroll($event)"

>

v-for="(row,index) in dataSheet"

:key="index"

>

v-for="(c,m) in row"

v-show="m!==0"

:key="m"

>

{{ c }}

export default {

name: "Table",

data() {

return {

dataSheet: [

[

"承订人", "2222222", "123", "444444", "20%", "20%",

],

[

"111", "2222222", "123", "444444","20%", "20%",

],

[

"111", "2222222", "123", "444444","20%", "20%",

],

[

"111", "2222222", "123", "444444","20%", "20%",

],

[

"111", "2222222", "123", "444444","20%", "20%",

],

[

"111", "2222222", "圣", "444444","20%", "20%",

],

[

"111", "2222222", "圣卡夫2", "444444","20%", "20%",

],

[

"111", "2222222", "123", "444444","20%", "20%",

],

[

"111", "2222222", "123", "444444","20%", "20%",

],

[

"111", "2222222", "123", "444444","20%", "20%",

],

[

"111", "2222222", "3333333", "444444","20%", "20%",

],

[

"111", "2222222", "333", "444444","20%", "20%",

],

[

"111", "2222222", "123", "444444","20%", "20%",

],

[

"111", "2222222", "123", "444444","20%", "20%",

],

[

"111", "2222222", "123", "444444","20%", "20%",

],

],

tableHeader: [

[

"人员代码","派工件数","预算金额","实际金额","当月达成率","全年达成率",

],

],

};

},

mounted() {

// 定一个生命周期钩子监听变动

// let maxHeight = window.screen.height

document.body.style.overflow = "hidden";

// this.$refs.right.style.width =

// "" + this.$refs.table.offsetWidth - 12 + "px"; // 这里的减101是减去左侧div宽度

// console.log(this.$refs.right.style.width);

},

activated: function() {},

methods: {

tableDivScroll() {

const $target = this.$refs.tableContainer;

// 首行固定

this.$refs.firstRowLayer.scrollLeft = $target.scrollLeft;

// 首列固定

this.$refs.firstColLayer.scrollTop = $target.scrollTop;

},

},

};

css样式:

/* 表格分为两部分,左边固定列和右边表格

左边固定列宽度为60px;右边为70px,右边因为要加边框 所以就是68+2px(左右边框) */

body {

overflow: hidden;

}

table::-webkit-scrollbar {

display: none;

}

thead,

tbody {

overflow: hidden;

background-color: #ffffff;

}

th,

td p {

width: 68px;

height: 40px;

display: inline-block;

line-height: 20px;

padding: auto 0;

margin: auto 0;

vertical-align: middle;

white-space:normal;

}

tr {

height: 40px;

}

th {

background-color: #cbcdc8;

}

td{

border: 1px solid

}

.pages {

height: 100%;

overflow: hidden;

}

.content1 {

height: 450px;

overflow: hidden;

margin: 5px;

}

/* 固定列的宽度为60 */

.left-content {

width: 60px;

float: left;

text-align: center;

border-top: 1px solid

}

.left-content p{

width: 60px;

height: 40px;

word-wrap: break-word;

}

.right-content{

border-top: 1px solid

}

/* 去掉表格的重复边框 */

.full-table{

border: 0px;

border-collapse: collapse;

}

.table-body {

width: 100%;

overflow: auto;

}

.table {

height: 450px;

overflow: auto;

}

/* 表头 */

.table-head {

overflow: hidden;

white-space: nowrap;

}

.table-head th{

width: 69px;

border-left: 1px solid;

}

说明:功能是实现了,代码里面也有注释,但是兼容性做的还不是很好,希望大佬们给出建议和帮助。

参考https://www.cnblogs.com/linwene/p/10169545.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Ant Design Vue 中,如果你想实现大屏轮播效果(类似于无限滚动或无缝滚动)并且同时保持表格Table)的固定表头功能,你可以使用 `vue-seamless-scroll` 这个插件来处理分页和滚动的平滑衔接。下面是简单的步骤: 1. 安装依赖:首先安装 `vue-seamless-scroll` 和可能的其他 UI 组件库如 `@antv/vue-g2` 或者 Ant Design VueTable 组件。 ```bash npm install vue-seamless-scroll @antv/vue-g2 --save // 如果使用 G2图表 npm install antd vue --save // 如果只用Ant Design Vue ``` 2. 引入组件:在你的项目中引入 `SeamlessScroll` 组件,并将它应用到需要无缝滚动的父容器上。 ```html <template> <div ref="seamlessContainer"> <ul :data-source="dataSource" seamless></ul> </div> </template> <script> import { Table } from 'antd'; import SeamlessScroll from 'vue-seamless-scroll'; export default { components: { Table, SeamlessScroll, }, // 其他代码... } </script> ``` 3. 数据源管理:你需要为 `data-source` 设置动态的数据,这可以是一个包含多个页面数据的数组,这样当用户滚动到底部时,会自动加载更多数据。 ```js data() { return { dataSource: [], // 初始数据 pageSize: 10, // 每页显示数量 currentPage: 1, // 当前页码 }; }, methods: { fetchMoreData() { // 假设你有一个 API 来获取更多数据,这里只是一个示例 this.$axios.get('api/data', { params: { page: this.currentPage + 1, size: this.pageSize, }, }).then(response => { this.dataSource.push(...response.data); // 将新数据添加到现有数据源 }); }, }, mounted() { this.initScroll(); }, destroyed() { this.scroll.destroy(); // 移除滚动监听 }, computed: { // 使用虚拟列表技术,只渲染当前可见的部分 virtualizedData() { const start = (this.scroll.yAxis.scrollTop / this.scroll.yAxis.clientHeight) * this.dataSource.length; const end = start + this.scroll.yAxis.clientHeight / this.scroll.yAxis.clientHeight; return this.dataSource.slice(Math.floor(start), Math.ceil(end)); }, }, mounted() { this.scroll = new SeamlessScroll(this.$refs.seamlessContainer, { containerHeight: this.$el.offsetHeight, // 自定义容器高度 itemHeight: this.getItemHeight(), // 根据实际元素计算行高 onScroll: this.fetchMoreData, // 触发滚动事件时加载更多数据 }); }, beforeDestroy() { this.scroll.destroy(); }, // ...其他方法 } ``` 4. 根据需求调整样式:如果需要使表头始终保持在顶部,可以在 CSS 中设置 `table-fixed-header` 类,确保表头不会随滚动而移动。 以上就是一个基本的大屏轮播并保持固定表头Vue 实现

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值