Ant Design Vue Table 表格内容高度自适应+固定表头踩坑

前言

对于非专业前端开发者来使用 Ant Design UI 组件来开发企业级后台管理系统来说是非常不错的选择,但这并不意味着我们能够用好这个框架,因为 UI 交互上和有许多细节上的问题对于非专业前端来说并不容易解决,最近在使用 Table 组件时就遇到一个小坑,特此记录一下解决的方法

功能

场景:固定表头 + 表格内容高度自适应

在日常开发中表格是我们使用的组件之一,因为服务端的每一张数据表都有可能要在前端的 Table 表格中做展示,如果表的数据比较多,我们基本都会用分页做展示并且通常会提供几个不同的分页条数选择,比如【20,50,100】,在选择100每页的时候,我们基本都要滚动下拉查看数据,这个时候如果表头不固定看数据就比较难受,所以在大数据量大表格中基本都需要提供固定表头列的功能来增强用户体验

实现

我们看下 Ant Design Vue 官网提供的例子:

<template><a-table sticky :scroll="{ x: 1500 }":columns="columns" :data-source="data" ></a-table>
</template>

注意:为了使用滚动表格,每个 columns 的列宽都要指定,避免自适应的时候列伸缩导致错位堆叠

上面的用法看起来非常简单,但其实是有问题的,因为 scroll 里面的 x 值是写死的,这样会导致表格并不能自适应伸缩,我们来看下改进的方案:

<template><a-table sticky :scroll="{x:'100%', y:'calc(100vh-250px)'}":columns="columns" :data-source="data" ></a-table>
</template>

解释一下:

x 横轴我们使用了宽度为 100% 来根据列宽实际宽度来自适应伸缩

y 纵轴我们使用了(动态计算浏览器可视高度 - 250px)以此来达到 y 轴的自适应伸缩,用 250px 是因为我们表格的位置坐标,通常距离顶部和底部通常都会留一些距离出来,这个可根据实际情况做调整。

上面的方案看起来没问题,但在实际测试时,发现在部分场景下会导致底部出现重复的x 轴滚动条,图示如下,底部有两个滚动条同时出现:

复现步骤:

1,先最大化浏览器窗口,然后表格滚动条向下滚动一部分

2,接着缩回原样,此时一切都正常

3,然后将滚动条滚动到表格底部,这个时候底部就会出现两个x轴滚动条

这个其实影响到是不大,只会在上面的步骤中触发,用浏览器 debug 了下 and design原生的 ant-table-sticky-scroll的样式如下:

发现其 bottom 属性的设置失效了,具体原因可能是被父包裹组件中属性覆盖了。

解决

知道了上述的原因后,解决也其实比较简单了,放弃原始表格上 sticky 属性的设置,改为我们自定使用 vue 的 deep 样式穿透来覆盖解决即可,最终的代码如下:

<template><a-table :scroll="{x:'100%', y:'calc(100vh-250px)'}":columns="columns" :data-source="data" ></a-table>
</template><style scoped>:deep(.ant-table-wrapper .ant-table-header){position: sticky;top: 0;z-index: 3;}:deep(.ant-table-wrapper .ant-table-sticky-scroll){position: sticky;bottom: 0;z-index: 3;}</style>

总结

可以看到问题的解决步骤,其实还是有一定难度的,不仅需要知道前端的 html+css+js的基础知识和 chrome 浏览器的 debug功能,还需要对使用的vue框架有所了解才行,虽然解决过程比较曲折,但在解决之后我们就会有种 “山重水复疑无路,柳暗花明又一村”的豁然开朗的快感

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/157418.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

echart 饼图怎么让图形铺满整个div

1.原效果&#xff08;未铺满&#xff09;&#xff1a;原配置 2.如果想要铺满&#xff0c;需要设置radius &#xff0c;radius的意思是 第一个元素为内环半径&#xff0c;第二个参数为外环半径&#xff1b; 如果想要填满的话直接写[0,100%],不过第一个为0后就不是圆环里&#…

FPGA实现HDMI转LVDS视频输出,纯verilog代码驱动,提供4套工程源码和技术支持

目录 1、前言免责声明 2、目前我这里已有的图像处理方案3、本 LVDS 方案的特点4、详细设计方案设计原理框图视频源选择静态彩条IT6802解码芯片配置及采集ADV7611解码芯片配置及采集silicon9011解码芯片配置及采集纯verilog的HDMI 解码模块奇偶场分离并串转换LVDS驱动 5、vivado…

【JavaScript】前端一定要砍的 Promise 用法详细解析

每一个前端都要学的 Promise 用法详细解析 文章目录 前言一. 认识Promise1.1. 异步回调处理1.2. 什么是Promise1.3. Promise重构 二. Promise对象方法2.1. Executor2.2. then方法 2.2.1. then方法两个参数2.2.2. then方法多次调用2.2.3. then方法的返回值2.3. catch方法2.3.1.…

HarmonyOS鸿蒙原生应用开发设计- 元服务(原子化服务)图标

HarmonyOS设计文档中&#xff0c;为大家提供了独特的元服务图标&#xff0c;开发者可以根据需要直接引用。 开发者直接使用官方提供的元服务图标内容&#xff0c;既可以符合HarmonyOS原生应用的开发上架运营规范&#xff0c;又可以防止使用别人的元服务图标侵权意外情况等&…

动手学深度学习 - 学习环境配置

学习环境配置 1、安装 Miniconda1.1 下载 miniconda31.2 环境变量配置1.3 安装成功测试1.4 配置文件1.5 使用conda创建、使用、删除环境1.6 conda 常用命令 2、使用 miniconda 安装 d2l2.1 下载 d2l 安装包2.2 安装 d2l 1、安装 Miniconda 参考&#xff1a; https://www.jb51.n…

Http代理与socks5代理有何区别?如何选择?(二)

上篇文章我们基本分别了解了http代理与socks5代理的定义与优缺点&#xff0c;接下来我们继续来了解http代理与socks5代理之间的比较与区别。 一、两者的比较 1、功能比较 HTTP代理专门用于Web流量&#xff0c;并在处理HTTP和HTTPS协议方面非常高效。它们可以修改正在传输的数…

MySQL笔记--Ubuntu安装MySQL并基于C++测试API

目录 1--安装MySQL 2--MySQL连接 3--代码案例 1--安装MySQL # 安装MySQL-Server sudo apt install mysql-server# 设置系统启动时自动开启 sudo systemctl start mysql # sudo systemctl enable mysql# 检查MySQL运行状态 sudo systemctl status mysql# 进入MySQL终端 sudo…

Appium 移动端自动化测试 —— 触摸(TouchAction) 与多点触控(MultiAction)

一、触摸 TouchAction 在所有的 Appium 客户端库里&#xff0c;TouchAction 触摸对象被创建并被赋予一连串的事件。 规范里可用的事件有&#xff1a; * 短按(press) * 释放(release) * 移动到(moveTo) * 点击(tap) * 等待(wait) * 长按(longPress) * 取消(cancel) * 执行(per…

vue项目打包时按一定的名称规范生成对应的压缩包

在项目部署中经常需要将打包的dist按一定的名称压缩成压缩包&#xff0c;今天记录一下打包时生成压缩包的过程。其中有用到的npm包需要自己安装一下。 js文件放置的目录如下 compress.js内容如下&#xff1a; // compress.jsimport fs from "fs"; import shell fro…

Linux设置ssh免密登录

ssh连接其他服务器 基本语法 ssh 另一台机器的ip地址 连接后输入连接主机用户的密码&#xff0c;即可成功连接。 输入exit 可以登出&#xff1b; 由于我配置了主机映射所以可以不写ip直接写映射的主机名即可&#xff0c;Linux配置主机映射的操作为 vim /etc/hosts # 我自己…

uniapp-自定义表格,右边操作栏固定

uniapp-自定义表格&#xff0c;右边操作栏固定 在网上找了一些&#xff0c;没找到特别合适的&#xff0c;收集了一下其他人的思路&#xff0c;基本都是让左边可以滚动&#xff0c;右边定位&#xff0c;自己也尝试写了一下&#xff0c;有点样式上的小bug&#xff0c;还在尝试修…