当前位置: 首页 > news >正文

自定义表格组件:实现表格中有固定列的功能逻辑

目录

    • 1,效果图
    • 2,实现思路
    • 3,实现方式

1,效果图

可以拖动纵向滑块,最左边一列固定住。
以同样的道理,可以在右面固定一列
在这里插入图片描述

2,实现思路

作为一个table组件,要接受父组件中的对table的数据定义以及对每一个列的数据定义。

因此要实现固定列,就要对父组件传来的每一列的数据进行筛选。
主要的步骤:
1, 用fixed来标记每一列的固定状态。
2,对父组件传来的每一列的数据进行筛选
3,将左固定列,右固定列,主列分别保存在数组里面。
4,将左固定列,右固定列,主列分别用 table标签包装起来,就相当于三个table放在一个div盒子里面。并用左固定列,主列,右固定列的顺序排布。
5,为了产生滚动条,在写主列table的时候外层需要用div去包裹起来,给这个div添加样式,让其可以在一定宽度下进行滚动。
6,并根据左固定列或者右固定列的类型去设置不同的样式,让其固定在左右两边。

3,实现方式

render: function (createElement) { 
// 用来设置左边右边列以及主列的数组var vm = this,mainCols = [],leftCols = [],rightCols = [],
// 对父组件传过来的的所有列插槽进行过滤,去分别左固定列,右固定列,主列。  
this.$slots.default.forEach((columnSlot) => {var opt = columnSlot.componentOptions;if (!opt || opt.tag !== "cvn-table-column") return;if (opt.propsData.type === "expand") {expandCol = columnSlot;return;}if (opt.propsData.fixed === "right") {return rightCols.push(columnSlot);} else if (opt.propsData.fixed !== undefined) {return leftCols.push(columnSlot);} else {return mainCols.push(columnSlot);}});// 将固定列使用fixed参数进行标记leftCols.forEach((col) => (col.componentOptions.propsData["position"] = "fixed"));rightCols.forEach((col) => (col.componentOptions.propsData["position"] = "fixed"));mainCols = leftCols.concat(mainCols, rightCols);
}
// 构造table表格的函数代码function parseTable(cols, fixed) {if (fixed === "right") mark = "right";return createElement("table",{class: {"cvn-table-inner": true,"cvn-table-simple": vm.theme === "simple","cvn-table-main": fixed === undefined,"cvn-table-fixed-left": fixed === "left","cvn-table-fixed-right": fixed === "right","cvn-table-oneline": vm.validOneline,},attrs: {"cvn-table-id": vm.tableID,name:fixed === "left"? "cvn-table-fixed-left": fixed === "right"? "cvn-table-fixed-right": "cvn-table-main",},},[createElement("thead",{class: {"cvn-table-row-container": true,"cvn-table-head-row": vm.height,},},[parseHeader(cols)]),createElement("tbody",{class: {"cvn-table-row-container": true,},attrs: {name: "cvn-table-body",},},},vm.validData.length === 0? [parseEmptyRow(cols.length, fixed === undefined ? true : false)]: expandCol? parseRowPairs(cols,fixed === undefined ? expandCol : null,vm.validData): vm.validData.map((rowData, index) =>parseRow(cols, rowData, index))),]);}

使用下面的方法将 整个table表格渲染出来,并给主列外面的div添加了滚动事件。通过leftCols.length的长度来判断是否要构造左固定列所对应的表格。右固定列同理。

function parseMainView() {return [leftCols.length > 0 ? parseTable(leftCols, "left") : undefined,rightCols.length > 0 ? parseTable(rightCols, "right") : undefined,createElement("div",{class: "cvn-table-view",on: {scroll: () => {vm.throttlenScrollWatch && vm.throttlenScrollWatch();},},attrs: {name: "cvn-table-view",},},[parseTable(mainCols)]),];}

相关css代码:

.cvn-table-new .cvn-table-inner.cvn-table-fixed-left,
.cvn-table-new .cvn-table-inner.cvn-table-fixed-right {position: absolute;z-index: 1;
}.cvn-table-new .cvn-table-inner.cvn-table-fixed-left {left: 0;top: 0;transition: box-shadow ease 0.2s;border-right: none !important;
}.cvn-table-new .cvn-table-inner.cvn-table-fixed-right {right: 0;top: 0;transition: box-shadow ease 0.2s;border-left: none !important;
}.cvn-table-new .cvn-table-inner.cvn-table-main .cvn-table-fixed-column {visibility: hidden;
}

相关文章:

自定义表格组件:实现表格中有固定列的功能逻辑

目录 1,效果图2,实现思路3,实现方式 1,效果图 可以拖动纵向滑块,最左边一列固定住。 以同样的道理,可以在右面固定一列 2,实现思路 作为一个table组件,要接受父组件中的对table的…...

uni-app弹窗列表滚动, 弹框下面的内容也跟随滚动解决方案

滑动弹窗里的列表,弹框下面的内容也会跟着滑动,导致弹窗中的列表不能正常滚动 1.弹窗组件代码,需要在最外层的view中加入touchmove.stop.prevent"moveHandle",且弹窗中需要滚动的列表要使用scroll-view标签包裹起来&…...

Django操作cookie、Django操作session、Django中的Session配置、CBV添加装饰器、中间件、csrf跨站请求

一、Django操作cookie cookie的原理cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上Cookie,这样服务器就能通过Cookie的内容来判断这个是“谁”了。1.设置cook…...

内网穿透——使用Windows自带的网站程序建立网站

文章目录 1.前言2.Windows网页设置2.1 Windows IIS功能设置2.2 IIS网页访问测试 3. Cpolar内网穿透3.1 下载安装Cpolar3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5.结语 1.前言 在网上各种教程和介绍中,搭建网页都会借助各种软件的帮助,比如…...

JavaScript请求数据的4种方法总结(Ajax、fetch、jQuery、axios)

JavaScript请求数据有4种主流方式,分别是Ajax、fetch、jQuery和axios。 一、Ajax、fetch、jQuery和axios的详细解释: 1、 Ajax Ajax(Asynchronous JavaScript and XML)是一种使用JavaScript在用户的浏览器上发送请求的技术&…...

js中的break和continue中的区别

js中break和continue有着一些差别。 首先&#xff0c;虽然break和continue都有跳出循环的作用&#xff0c;但break是完全跳出循环&#xff0c;而continue则是跳出一次循环&#xff0c;然后开启下一次的循环。 下面我就来举几个例子吧。 var num 0;for(var i 1;i < 10;i){i…...

Cat(2):下载与安装

1 github源码下载 要安装CAT&#xff0c;首先需要从github上下载最新版本的源码。 官方给出的建议如下&#xff1a; 注意cat的3.0代码分支更新都发布在master上&#xff0c;包括最新文档也都是这个分支注意文档请用最新master里面的代码文档作为标准&#xff0c;一些开源网站…...

程序崩溃生成dump文件定位到崩溃处

#include <DbgHelp.h> #pragma comment(lib,"Dbghelp.lib")long __stdcall CrashInfocallback(_EXCEPTION_POINTERS* pexcp) {// 创建dmp文件HANDLE hDumpFile ::CreateFile(L"Memory.DMP",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORM…...

安卓获取当前的IP地址

文章目录 获取IP地址完整示例代码 获取IP地址 在安卓中&#xff0c;我们使用静态方法NetworkInterface.getNetworkInterfaces() 来获取当前设备上所有的网络接口。 网络接口是指设备上用于进行网络通信的硬件或软件。这些接口可以是物理接口&#xff08;如以太网接口、无线网…...

Pyqt5-自动化电池监测工具

开源第二篇&#xff0c;书接上回&#xff0c;上回的工具用起来着实不方便&#xff0c;功能也少&#xff0c;不能满足大部分需求&#xff0c;体现在&#xff1a;钉钉发送数据&#xff0c;数据处理&#xff0c;以及接收数据&#xff0c;定时任务等这部分。 随后对其进行了优化 数…...

Struts2一次请求参数问题的记录

最近&#xff0c;一次前端正常请求&#xff0c;但后台出现请求参数值的变化&#xff0c;导致报错&#xff0c;问题如下&#xff1a; 从入参request中查看请求参数&#xff0c;是一个Json字符串&#xff0c;其中有个description的键值对&#xff1b; 但是&#xff0c;接下来调用…...

ctfshow-web9

0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 0x02 Write Up 拿到一个站的时候一定要看robots.txt文件 访问一下 看到一个phps&#xff0c;然后下载一下 看到md5&#xff0c;参考这个https://blog.csdn.net/HAI_WD/article/details/132345156?spm1001.2014.3001.5501 …...

网络安全(黑客)自学路线/笔记

想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客&#xff01; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全…...

Vim基本使用

Vim基本使用 概念模式类型常规模式编辑模式命令模式 概念 vim 是一款功能丰富、高度可定制和高效的文本编辑器&#xff0c;适用于处理各种文本文件和编程任务。熟练使用vim帮助提高编辑效率&#xff0c;并为用户提供更多的操作选项。 模式类型 常规模式 使用vim打开一个文件…...

二 根据用户行为数据创建ALS模型并召回商品

二 根据用户行为数据创建ALS模型并召回商品 2.0 用户行为数据拆分 方便练习可以对数据做拆分处理 pandas的数据分批读取 chunk 厚厚的一块 相当大的数量或部分 import pandas as pd reader pd.read_csv(behavior_log.csv,chunksize100,iteratorTrue) count 0; for chunk in …...

SpringBoot ⽇志⽂件

日志 1. 作用2. 日志的使用3. 日志的级别4. 日志的持久化 1. 作用 日志最主要的⽤途就是排除和定位问题。 除了发现和定位问题之外&#xff0c;我们还可以通过⽇志实现以下功能&#xff1a; 记录⽤户登录⽇志&#xff0c;⽅便分析⽤户是正常登录还是恶意破解⽤户。记录系统的…...

SpringBoot案例-部门管理-查询

查看页面原型&#xff0c;明确需求需求 页面原型 需求分析 阅读接口文档 接口文档链接如下&#xff1a; https://docs.qq.com/doc/DUkRiTWVaUmFVck9N 思路分析 用户发送请求&#xff0c;交由对应的Controller类进行处理&#xff0c;Controller类调用service实现查询部门功…...

Java中处理表格

大家好 , 我是苏麟 , 也是很久没有更新了 , 今天带来一个很好使用的一个库 easyexcel. JAVA后端开发中可能会遇到一个问题 , 就是处理Execel表格 , 当然不一定非要用Java 我们在这里只说在Java里怎么去处理表格 . Easy Excel 我们今天要说到就是 Easy Excel , 这个是阿里的项…...

指静脉开集测试(OpenSet-test)代码(包含7个数据集)

七个数据集:sdu、mmc、hkpu、scut、utfvp、vera、nupt 一、SDU 80%用于训练,20%用于作为开集测试 1.数据集分割代码 ①先把636个类别提取出来 func: 创建temp_sdu,将636个类划分出来。下一个代码块将进行openset_sdu的分割import os from shutil import copy, rmtre…...

okcc对接ASR平台,okcc客户投诉的安全问题

客户投诉: 客户为什么要投诉&#xff1f;实际上分为两种情况&#xff0c;一是客户被冒犯到不能容忍导致的投诉&#xff0c;二是恶意投诉。降低客户被冒犯投诉的概率&#xff0c;无非就是选择客户、规范用语、降低频度&#xff1b;减少恶意投诉&#xff0c;回避是实践证明最有效…...

基于S7-200 PLC与组态王的大棚控制系统:产品原理图与IO分配详解

基于S7-200 PLC和组态王温室大棚控制 我们主要的后发送的产品有&#xff0c;带解释的梯形图接线图原理图图纸&#xff0c;io分配&#xff0c;组态画面 菜农张叔上周还给我打电话吐槽&#xff1a;“小王啊&#xff0c;上周那场降温加突然转晴&#xff0c;我三点爬起来盖半层棉被…...

AT25SF041 SPI Flash驱动设计与嵌入式可靠性实践

1. AT25SF041 SPI Flash 存储器驱动深度解析AT25SF041 是由 Adesto&#xff08;现为 Dialog Semiconductor&#xff09;推出的 4 Mbit&#xff08;512 KB&#xff09;串行 NOR Flash 存储器&#xff0c;采用标准四线 SPI 接口&#xff08;CLK、CS#、DI、DO&#xff09;&#xf…...

简述双亲委派机制以及其优点

面试 概念&#xff1a;加载类的时候先交给自己的父类加载器执行&#xff0c;直到顶层的启动类加载器&#xff0c;如果父加载器能够完成加载&#xff0c;则交给父类加载器&#xff0c;否则自己尝试加载。 优点&#xff1a;保证类的加载的安全性&#xff0c;避免类的重复加载。...

如何选择适合的单北斗变形监测一体机以提升基础设施安全?

本文将重点讨论如何选择适合的单北斗变形监测一体机&#xff0c;以增强基础设施的安全性。在当前基础设施建设快速发展的背景下&#xff0c;单北斗GNSS的应用显得尤为重要。通过深入理解单北斗变形监测的原理&#xff0c;用户能够更好地把握设备的核心优势&#xff0c;尤其是在…...

高基数路由器的最佳拍档?深入浅出解析Flattened Butterfly拓扑的优缺点与适用场景

高基数路由器的最佳拍档&#xff1f;深入浅出解析Flattened Butterfly拓扑的优缺点与适用场景 在构建大规模互连网络时&#xff0c;拓扑结构的选择往往决定了系统的性能上限和成本下限。当工程师面对高基数路由器&#xff08;High-Radix Router&#xff09;的选型时&#xff0c…...

如何让扫描PDF变得可搜索?OCRmyPDF-Desktop完整解决方案

如何让扫描PDF变得可搜索&#xff1f;OCRmyPDF-Desktop完整解决方案 【免费下载链接】pdfocr-desktop PDF OCR Application, adds an OCR text layer to scanned PDF files, allowing them to be copied and searched. 项目地址: https://gitcode.com/gh_mirrors/oc/pdfocr-d…...

求一个V站邀请码

有没有大佬可以给个邀请码~~~~~~~~~~~~~~~~~~...

从智慧灯杆到无人驾驶:如何用Raspberry Pi 4和Arduino搭建微型智慧城市实验平台

从智慧灯杆到无人驾驶&#xff1a;如何用Raspberry Pi 4和Arduino搭建微型智慧城市实验平台 在创客文化和高校工程教育中&#xff0c;低成本硬件的创新应用正掀起一场微型智慧城市实验的革命。只需一块树莓派主板、几个传感器和开源软件&#xff0c;就能在桌面上复现价值数百万…...

最完整的大模型算法工程师技术栈图谱(2026版)

目录 一、基础能力&#xff08;所有AI工程师的底座&#xff09; 1 编程语言 2 数据结构与算法 3 数学基础 二、深度学习基础 深度学习模型基础 三、大模型核心技术 1 Transformer架构 2 预训练 3 Tokenizer 四、大模型训练体系 1 分布式训练 2 训练优化技术 3 微…...

OpenClaw+GLM-4.7-Flash:个人网络安全监控助手

OpenClawGLM-4.7-Flash&#xff1a;个人网络安全监控助手 1. 为什么需要个人网络安全监控 去年我的开发机遭遇了一次恶意脚本攻击&#xff0c;导致本地Git仓库被篡改。事后排查发现&#xff0c;攻击者通过一个陈旧的SSH密钥漏洞入侵&#xff0c;而系统日志里其实早有异常登录…...