前言

uni-app 插件市场 各类table插件挺多的,基本上我都下载试了个遍,最后各有各的不满意 还是自己撸了一个,自己也试了 好几种布局方式,做了好几款demo都不满意,只到改了一款 可以  左右列固定 根据tableHead批量遍历渲染数据 的table

最重要一点是 项目是 uni-app 打包成 ios或android -app项目,而该类项目 不支持 :class :style 动态样式绑定

一、思路

首先 功能需求是  根据tableHead可以批量渲染数据、  左右列(左侧序号列及扩展固定列,右侧 操作功能列)可以固定

本来先尝试做了几种 比如 tr内部分 左中右布局, 这样 左右行高可以随中部数据行高相同,但左右列 尝试各种css样式布局 都不成功,及 ios或android打包项目 不支持 :class :style 动态样式绑定 只好作罢

而后尝试 分三个table 方式制作成功

二、代码

1.布局

<!-- table --><view class="table-wrapper"><view ref="table" class="my-table mb10"><view class="left-table" v-if="isTableLeftFlag"><thead class="table-head"><tr><th class="table-left-float" v-if="isTableNumberSortFlag"><view class="my-td-p w50">order</view></th></tr></thead><tbody class="table-body" v-if="tableList.length > 0"><tr class=""  v-for="(row,index) in tableList" :key="index"><td class="table-left-float" v-if="isTableNumberSortFlag"><view class="my-td-p w50">{{index+1}}</view></td></tr></tbody><tbody class="table-body" v-else><tr class="table-left-float" colspan="1"><td colspan="1"><view class="my-td-p">1</view></td></tr></tbody></view><view class="center-table"><thead class="table-head"><tr><th class="table-center-float" v-for="(header,index) in tableHead" :key="index"><view class="my-td-p " v-if='header.key ==="id"'>{{header.title}}</view><view class="my-td-p " v-else-if='header.key === "operator"'>{{header.title}}</view><view class="my-td-p " v-else-if='header.key === "modifyTime"'>{{header.title}}</view><view class="my-td-p " v-else>{{header.title}}</view></th></tr></thead><tbody class="table-body" v-if="tableList.length > 0"><tr class="table-content" v-for="(row,index) in tableList" :key="index"><td class="table-center-float" v-for="(item3,index3) in tableHead" :key="index3"><view class="my-td-p " v-if='item3.key ==="id"'>{{row[item3.key]}}</view><view class="my-td-p " v-else-if='item3.key === "operator"'>{{row[item3.key]}}</view><view class="my-td-p " v-else-if='item3.key === "modifyTime"'>{{row[item3.key]}}</view><view class="my-td-p " v-else>{{row[item3.key]}}</view></td></tr></tbody><tbody class="table-body" v-else><tr colspan="3"><td colspan="3"><view class="my-td-p">No data available</view></td></tr></tbody></view><view class="right-table" v-if="isTableRightFlag"><thead class="table-head"><tr><th class="table-left-float"><view class="my-td-p">operate</view></th></tr></thead><tbody class="table-body" v-if="tableList.length > 0"><tr class=""  v-for="(row,index) in tableList" :key="index"><td class="table-right-float"><view class="my-td-p w100"><!--     <text @click="editBtn(row)" class="mr10 c-01a4f6">编辑</text> --><text @click="deleteBtn(row)" class="c-01a4f6">删除</text></view></td></tr></tbody><tbody class="table-body" v-else><tr colspan="1"><td class="table-right-float" colspan="1"><view class="my-td-p">删除</view></td></tr></tbody></view></view><!-- 分页 --></view>

2.js

指定 几个字段 固定在左列,这个功能有实现 但这偷个懒 就不放了,批量勾选项 也是;

<script>
const defaultTableHead = [// { key: 'id', title: 'id', width: '160' },{ key: 'parcelNo', title: 'parcelNo', width: '160' },// { key: 'warehouseId', title: '仓库id', width: '160' },{ key: 'status', title: 'status', width: '100' },{ key: 'remark', title: 'remark', width: '100' },{ key: 'operator', title: 'operator', width: '100' },{ key: 'createTime', title: 'createTime', width: '200' },{ key: 'modifyTime', title: 'modifyTime', width: '200' },]const MockTableList = [{ operator: '客户1打好后爱上撒配合', id: '00001', remark: '3', status: '1',modifyTime: '2020-09-10 22:10:00',createTime: '2020-09-10 22:10:00',parcelNo:'01',warehouseId:'01'},{ operator: '客户2间回到还是都定好i但是', id: '00002', remark: '9', status: '0',modifyTime: '2020-09-10 22:10:00',createTime: '2020-09-10 22:10:00',parcelNo:'01',warehouseId:'01'},{ operator: '客户3', id: '00003', remark: '6', status: '1',modifyTime: '2020-09-10 22:10:00',createTime: '2020-09-10 22:10:00',parcelNo:'01',warehouseId:'01'},{ operator: '客户4', id: '00004', remark: '6', status: '1',modifyTime: '2020-09-10 22:10:00',createTime: '2020-09-10 22:10:00',parcelNo:'01',warehouseId:'01'},{ operator: '客户5', id: '00005', remark: '6', status: '1',modifyTime: '2020-09-10 22:10:00',createTime: '2020-09-10 22:10:00',parcelNo:'01',warehouseId:'01'},];
export default {data() {// idKey: 'id', // list的唯一主键tableHead: defaultTableHead,tableList: MockTableList,tableLoading: false,// selectRow: [], // table选中数组isTableNumberSortFlag: true,isTableLeftFlag: true, // 默认开启左侧 序号 固定列isTableRightFlag: true, // 默认开启右侧 操作 固定列},methods: {deleteBtn(item,index) {console.log('deleteBtn()-item', item);const nowList = this.tableListthis.tableList = nowList.splice(index, 1)// this.getList()},}
}

3.css

<!-- table- 三个左种右分table 时 样式  -->
<style scoped>/* 去掉表格的重复边框 */table::-webkit-scrollbar {display: none;}th{overflow: hidden;}td{overflow: hidden;}.table-wrapper{padding: 0 10rpx;}/* 表头 */.table-head {overflow: hidden;text-align: center;white-space: nowrap;}.table-body{text-align: center;overflow-x: scroll;min-height: 600rpx;/* height: 600rpx; */overflow-y: scroll;}.table-content{overflow-x: scroll;min-height: 600rpx;}.my-table{overflow-y: scroll;border-collapse:collapse;border-spacing:0; position: relative;text-align: center;display: flex;align-items: center;justify-content: flex-start;}.left-table{z-index: 3;background-color: #fff;position: relative;float: left;}.center-table{z-index: 1;background-color: #fff;position: relative;float: left;width: 100%;overflow: scroll;}.right-table{z-index: 3;background-color: #fff;position: relative;float: left;}.table-left-float{/* float: left; *//* position: absolute;left:6rpx; */background-color: #fff;border-left: 2rpx solid #dedede;border-right: 2rpx solid #dedede;z-index: 2;}.table-center-float{border-left: 2rpx solid #dedede;border-right: 2rpx solid #dedede;}.table-right-float{/* float: right; *//* position: absolute;right:6rpx; */background-color: #fff;border-left: 2rpx solid #dedede;border-right: 2rpx solid #dedede;z-index: 2;}tr{width: 100%;/* border: 2rpx solid #dedede; */border-top: 2rpx solid #dedede;border-bottom: 2rpx solid #dedede;}.my-td-p{white-space: nowrap; /*  重点控制 字符不能换行,不然样式飞了 */text-align: center;/* height: 80rpx; */display: inline-block;line-height: 40rpx;padding: 4rpx 4rpx;margin: auto 0;vertical-align: middle;overflow: hidden;min-width: 100rpx;/* white-space:normal; */}
</style>
<!-- 本页面用到个人 common公共样式  -->
<style scoped>.mb5{margin-bottom: 10rpx;}.mb10{margin-bottom: 20rpx;}.w50{width: 100rpx;}.w100{width: 200rpx;}.c-01a4f6{color:#01a4f6 ;}
</style>

uni-app 自定义table-demo 左右列固定冻结相关推荐

  1. bootstrap table 怎么实现前两列固定冻结?

    $("#Table").bootstrapTable('destroy').bootstrapTable({pagination: true,//分页minimumCountCol ...

  2. uni app 自定义 头部组件(2) 局部 右侧按钮

    上一篇为完全的自定义头部 链接:https://blog.csdn.net/qq_37403179/article/details/102955419 本片则是使用uniapp已有的自定义方法给头部添 ...

  3. js实现表格首行首列固定滑动

    js+css实现table首行首列的冻结效果. 这个方案是把表格分为4块,首行首列不可滑动,利用onscroll 动态根据内容设置冻结首行首列内容. html <div id="lef ...

  4. elementui表格中tip设置_Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用...

    {column}) { return h( 'div',// 添加选中事件select (data) { console.log(data);}... 效果如下: 3.在表头添加一个Tooltip 我 ...

  5. 使用ant design的table控件最后一列固定(fixed)遇到的问题

    工作以来一直在做2b的项目,因此表单操作,权限设置,一些业务逻辑就做的比较多. 首先介绍下背景:前后端完全分离,前端技术栈使用react+redux+antd,经常是没有视觉设计,全凭产品需求文档·· ...

  6. element-ui table表格 增加合计行 和 表格列固定之后 滚动条无法滚动

    element-ui table表格 增加合计行 和 表格列固定之后 滚动条无法滚动 是因为el-table__fixed或el-table__fixed-right有了合计之后把 el-table_ ...

  7. uni app(H5)中软键盘弹出,固定定位绝对定位元素位置发生错乱

    一.问题如下 最近用uni app写项目,发现H5软键盘弹起,导致我固定定位的按钮被顶了上去,如图 二.解决方法 1.让其在输入框获取焦点时隐藏 百度了许多,有让输入框获取焦点时让按钮隐藏的方法,失去 ...

  8. uni app 手机端导航栏自定义

    uni app 手机端导航栏自定义 第一步:明确顶部导航栏的构成(手机自带的顶部菜单+开发的顶部菜单栏) 获取手机自带的顶部导航栏 <view class="navigation_ba ...

  9. element table 合计 第一行 固定列

    element table 合计 第一行 在这位大哥这里学来的, 但同时我这边的情况是: 固定高度, 第一列固定, 参数多, 因此, 这个方法不能够完全满足, 因此加入以下代码: 代码作用: 在每次获 ...

最新文章

  1. 19-flutter的ListView 和 GridView的使用
  2. spark写mysql优化简书_spark——通过jdbc连接数据库中遇到的问题
  3. Mysql存储过程和存储函数
  4. 在JSF 2中对定制验证器进行参数化
  5. 使用Sqlserver事务发布实现数据同步
  6. 【云速建站】页面产品维护简述
  7. python连接db2数据库 import的包_python 连接DB2数据库
  8. 马云卸任阿里巴巴集团董事:传承计划执行完毕,换个江湖见!
  9. ionic 集成websocket
  10. Java多线程概念[同步容器,并发容器](二)
  11. Biztalk 2013 R2 开发环境安装
  12. matlab计算abc三相短路电流_供配电系统设计需要用到的计算公式(结合手册简要总结)...
  13. Linux tty字符终端下VIM显示混乱的解决方法
  14. PaddleNLP基于ERNIR3.0文本分类以CAIL2018-SMALL数据集罪名预测任务为例【多标签】
  15. 域名Whois查询API,域名Whois,域名历史Whois
  16. 在linux系统下ping不通windows主机问题
  17. 非虚无,落实处的积极心理学小科普(Introduction to Positive Psychology)
  18. mysql数据库如何添加外键约束_MySQL数据库之外键约束的简单理解
  19. Python可视化配色方案,分分钟实现配色自由啦~
  20. VSCode下载及各种实用插件安装教程

热门文章

  1. 机器人(含自动驾驶汽车)成本和电脑手机相比有哪些差异化
  2. 关于在ARM中的函数调用问题
  3. ubuntu 生成桌面快捷方式(有图)
  4. Mac Safari 此连接非私人连接
  5. 华为路由器显示无法连接网络连接到服务器,华为路由器可以搜到WiFi信号但无法连接怎么办?...
  6. 物联网是什么?_物联网怎么定义
  7. css svg做动图,用svg动态绘制图形
  8. python中的list 冒号用法
  9. jvm调优二:jvm内存模型剖析和参数设置
  10. 【计算机网络】知识点合集