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

Vue.js 动态设置表格最大高度的实现

概述

在现代 Web 开发中,响应式设计至关重要,尤其是在处理复杂的布局和数据表格时。表格通常会受到多种因素的影响,如分页、合计行或动态内容,这可能导致表格高度的变化。本文将介绍一个基于 Vue.js 的方法 setMaxHeight,该方法动态计算和设置表格的最大高度,确保表格始终能在可视区域内显示,而不受其它元素的干扰。

目标
  • 通过计算可用空间并自动调整表格高度,确保表格显示在合适的区域内。
  • 动态处理不同布局和页面元素的高度变化,如分页、合计行等。
  • 提供可维护、可扩展的解决方案,适应不同表格组件库(如 el-tableivu-table)的要求。
代码分析
export default {data() {return {maxHeight: 0,  // 表格最大高度};},methods: {/*** 动态计算表格最大高度* 1. 根据容器的总高度减去非表格元素的高度来计算表格的最大高度* 2. 支持分页、合计行等因素的动态变化* * @param {HTMLElement} e - 表格容器元素*/setMaxHeight(e) {if (!e) return;  // 如果未传入容器元素,直接返回// 过滤掉表格本身(ivu-table-wrapper、el-table)以及v-resize生成的object节点const otherEle = Array.from(e.children).filter(item => !item.classList.contains('ivu-table-wrapper') && !item.classList.contains('el-table') && item.nodeName !== 'OBJECT');// 计算过滤后的其它元素的高度之和const otherHeight = otherEle.reduce((sum, item) => sum + item.clientHeight, 0);// 判断表格是否包含合计行const hasSummary = Array.from(e.children)[0].classList.contains('ivu-table-with-summary');// 计算表格最大高度this.maxHeight = e.clientHeight - otherHeight - (hasSummary ? 36 : 0);},},
};
代码逻辑
  1. 初始化数据: 在 Vue 组件的 data 中,定义一个 maxHeight 属性来存储计算得到的最大表格高度。

  2. setMaxHeight 方法

    • 参数说明:方法接受一个 DOM 元素 e,该元素通常是包含表格及其他子元素的容器。
    • 判断空值:首先检查是否传入有效的容器元素 e,如果为空,直接返回。
  3. 过滤非表格节点

    • 使用 Array.frome.children 转化为数组,并通过 filter 方法排除掉类名为 ivu-table-wrapperel-table 的子元素,以及 OBJECT 类型的节点(可能是由 v-resize 或其他插件生成的用于调整大小的元素)。
  4. 计算其它元素的总高度

    • 通过 reduce 方法遍历所有非表格元素,并累加它们的 clientHeight,即元素的可视高度。
  5. 检查是否包含合计行

    • 检查表格容器的第一个子元素是否包含 ivu-table-with-summary 类名来判断是否显示合计行。如果存在合计行,额外减去 36px。
  6. 计算最大高度

    • 最终,通过减去非表格元素的总高度以及合计行的高度(如果有的话),计算出表格的最大高度 maxHeight,并将其赋值给组件的数据属性 maxHeight
使用场景

此方法适用于需要动态调整表格高度的场景,尤其是在以下情况下:

  • 页面布局中包含分页元素,且分页高度可能会动态变化。
  • 表格中可能包含合计行或其他特殊行,需要在计算表格高度时考虑其额外占用的空间。
  • 表格容器的高度是固定的,但内部内容可能会随时间或用户交互而变化,导致表格需要重新调整高度。
示例

假设你在 Vue 组件中使用了 el-tableivu-table,并希望根据容器的高度动态设置表格的最大高度:

<template><div class="table-container" ref="tableContainer" @resize="setMaxHeight($refs.tableContainer)"><el-table :data="tableData" :max-height="maxHeight"><!-- 表格内容 --></el-table></div>
</template><script>
import { ref, onMounted } from 'vue';export default {setup() {const tableData = ref([]);const maxHeight = ref(0);onMounted(() => {// 在组件挂载完成后,初始化最大高度this.setMaxHeight(this.$refs.tableContainer);});return {tableData,maxHeight,setMaxHeight,};},
};
</script>
性能优化
  1. 减少不必要的 DOM 操作

    • 在每次页面大小或布局变化时调用 setMaxHeight 方法时,确保只进行必要的 DOM 查询和计算。可以考虑节流(throttle)或防抖(debounce)技术,避免频繁执行。
  2. 缓存结果

    • 如果表格容器的大小变化不频繁,可以考虑缓存计算结果,避免重复计算。
总结

setMaxHeight 方法是一个实用的解决方案,帮助开发者动态调整表格的最大高度,确保表格在各种布局下都能自适应地显示。通过过滤非表格节点、计算其它元素的高度并考虑合计行的影响,能够灵活地处理复杂的布局和交互场景。

相关文章:

Vue.js 动态设置表格最大高度的实现

概述 在现代 Web 开发中&#xff0c;响应式设计至关重要&#xff0c;尤其是在处理复杂的布局和数据表格时。表格通常会受到多种因素的影响&#xff0c;如分页、合计行或动态内容&#xff0c;这可能导致表格高度的变化。本文将介绍一个基于 Vue.js 的方法 setMaxHeight&#xf…...

Java测试开发平台搭建(九)前端

1. 搭建前端vue环境 Vue3 安装 | 菜鸟教程 2. 创建项目 1.进入ui vue ui 2. create项目 3. 成功之后添加插件&#xff1a; cli-plugin-router vue-cli-plugin-vuetify 4. 添加依赖 axios 5. 点击任务开始运行 如果报错&#xff1a; 修改vue.config.jsconst { defineConfig }…...

MySQL多表查询练习

1.找出销售部门中年纪最大的员工的姓名 mysql> select name,age from dept a ,emp_new b where a.dept1b.dept2 and dept_name销售order by age desc limit 1; ------------ | name | age | ------------ | 荣七 | 64 | ------------ 1 row in set (0.00 sec) 2.求财务…...

低代码运维与管理服务

文章目录 前言一、服务内容二、服务范围三、服务流程四、服务交付件五、责任矩阵六、验收标准 前言 随着云计算技术的发展&#xff0c;数字化转型是企业的必然选择&#xff0c;企业需要实现广泛的连接并走向开放&#xff0c;传统集成工具无法满足当前企业面临的数字化转型诉求…...

【机器学习:三十二、强化学习:理论与应用】

1. 强化学习概述 **强化学习&#xff08;Reinforcement Learning, RL&#xff09;**是一种机器学习方法&#xff0c;旨在通过试验与反馈的交互&#xff0c;使智能体&#xff08;Agent&#xff09;在动态环境中学习决策策略&#xff0c;以最大化累积奖励&#xff08;Cumulative…...

解决wordpress媒体文件无法被搜索的问题

最近,我在wordpress上遇到了一个令人困扰的问题:我再也无法在 WordPress 的媒体库中搜索媒体文件了。之前,搜索媒体非常方便,但现在无论是图片还是其他文件,似乎都无法通过名称搜索到。对于我这样需要频繁使用图片的博主来说,这简直是个大麻烦。 问题源头 一开始,我怀…...

【2024年华为OD机试】(B卷,100分)- 增强的strstr (Java JS PythonC/C++)

一、问题描述 题目描述 C 语言有一个库函数 char *strstr(const char *haystack, const char *needle)&#xff0c;用于在字符串 haystack 中查找第一次出现字符串 needle 的位置&#xff0c;如果未找到则返回 null。 现要求实现一个 strstr 的增强函数&#xff0c;可以使用…...

【前端】CSS学习笔记

目录 CSS的简介CSS的概念语法 CSS的引入方式内联样式&#xff08;行内样式&#xff09;内部样式外部样式&#xff08;推荐&#xff09; 选择器全局选择器元素选择器类选择器ID选择器合并选择器后代选择器子选择器相邻兄弟选择器通用兄弟选择器伪类选择器:link:visited:hover:ac…...

项目架构调整,新增sunrays-combinations模块

文章目录 1.介绍2.环境搭建1.sunrays-framework下新建sunrays-combinations模块2.删除src3.pom.xml4.查看是否交给sunrays-framework管理5.删除sunrays-common中module引用的common-core-starter6.sunrays-combinations统一管理子模块7.common-all-starter的父模块修改为sunray…...

linux网络编程11——线程池

1. 线程池 1.1 池化技术原理 池化技术 当一个资源或对象的创建或者销毁的开销较大时&#xff0c;可以使用池化技术来保持一定数量的创建好的对象以供随时取用&#xff0c;于是就有了池式结构。常见的池式结构包括线程池、内存池和连接池。 池化技术应用的前提条件主要包括三…...

MySQL - 主从同步

​​​​​​1.主从同步原理&#xff1a; MySQL 主从同步是一种数据库复制技术&#xff0c;它通过将主服务器上的数据更改复制到一个或多个从服务器&#xff0c;实现数据的自动同步。 主从同步的核心原理是将主服务器上的二进制日志复制到从服务器&#xff0c;并在从服务器上执…...

基于微信小程序的安心陪诊管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

深入剖析iOS网络优化策略,提升App性能

一、引言 在当今移动互联网时代&#xff0c;iOS 应用的网络性能直接关系到用户体验。无论是加载速度缓慢、频繁的网络错误&#xff0c;还是高额的流量消耗&#xff0c;都可能导致用户流失。因此&#xff0c;iOS 网络优化成为开发者提升应用质量、增强用户满意度的关键环节。本文…...

游戏开发中常用的设计模式

目录 前言一、工厂模式二、单例模式三、观察者模式观察者模式的优势 四、状态模式状态模式的优势 五、策略模式策略模式的优势 六、组合模式七、命令模式八、装饰器模式 前言 本文介绍了游戏开发中常用的设计模式&#xff0c;如工厂模式用于创建对象&#xff0c;单例模式确保全…...

【PyCharm】远程连接Linux服务器

【PyCharm】相关链接 【PyCharm】连接Jupyter Notebook【PyCharm】快捷键使用【PyCharm】远程连接Linux服务器【PyCharm】设置为中文界面 【PyCharm】远程连接Linux服务器 PyCharm 提供了远程开发的功能&#xff0c;使得开发者可以在本地编辑代码或使用服务器资源。 下面将详…...

InVideo AI技术浅析(五):生成对抗网络

一、特效生成 1. 工作原理 特效生成是计算机视觉中的高级应用,旨在通过算法生成高质量的视觉特效,如风格迁移、图像到图像的翻译等。InVideo AI 使用生成对抗网络(GAN)来实现这一功能。GAN 通过生成器和判别器两个网络的对抗训练,生成逼真的视觉特效。 2. 关键技术模型…...

Spring自定义BeanPostProcessor实现bean的代理

上文中&#xff1a;https://blog.csdn.net/qq_26437925/article/details/145241149 大致了解了spring aop的代理的实现&#xff0c;其实就是有个BeanPostProcessor代理了bean对象。 本文直接编写最简单的代码直观感受下 bean A: Service public class A {public A() {System.…...

【HF设计模式】06-命令模式

声明&#xff1a;仅为个人学习总结&#xff0c;还请批判性查看&#xff0c;如有不同观点&#xff0c;欢迎交流。 摘要 《Head First设计模式》第6章笔记&#xff1a;结合示例应用和代码&#xff0c;介绍命令模式&#xff0c;包括遇到的问题、采用的解决方案、遵循的 OO 原则、…...

Linux使用SSH连接GitHub指南

基础配置流程 步骤1:生成SSH密钥 打开终端:首先,打开你的Linux终端。 生成SSH密钥对:输入以下命令来生成一个新的SSH密钥对: ssh-keygen -t rsa -b 4096 -C "your_email@example.com"-t rsa:使用RSA加密算法生成密钥。-b 4096:密钥长度为4096位,增加安全性。…...

v2富文本框封装 @wangeditor/editor-for-vue

1 组件封装 <template><div class"editor-container"><div class"editor-wrapper"><Toolbarstyle"border-bottom: 1px solid #ccc":editor"editor":defaultConfig"toolbarConfig":mode"mode&quo…...

双摄帧同步:从软同步到硬同步的工程实践与调试指南

1. 双摄帧同步技术概述 第一次接触双摄同步需求时&#xff0c;我也被各种专业术语搞得头晕眼花。简单来说&#xff0c;双摄帧同步就是要让手机的两个摄像头像双胞胎一样默契配合&#xff0c;确保它们拍摄的画面在时间上完全对齐。想象一下用双眼看世界时&#xff0c;如果左右眼…...

解锁Steam创意工坊:WorkshopDL跨平台下载技术深度解析

解锁Steam创意工坊&#xff1a;WorkshopDL跨平台下载技术深度解析 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 还在为不同游戏平台的模组兼容性问题烦恼吗&#xff1f;Works…...

Spring Boot Starter 自动加载机制

Spring Boot Starter 自动加载机制解析 Spring Boot以其"约定优于配置"的理念简化了Java开发&#xff0c;而Starter自动加载机制正是这一理念的核心体现。通过预定义的依赖组合与自动化配置&#xff0c;开发者无需手动编写繁琐的XML或注解配置即可快速集成功能模块。…...

如何用开源智能工具一键提升你的英雄联盟游戏体验

如何用开源智能工具一键提升你的英雄联盟游戏体验 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 想要在英雄联盟中更高效地获取信息、减少重复…...

你的电脑会呼吸吗?用FanControl打造智能散热系统的终极指南

你的电脑会呼吸吗&#xff1f;用FanControl打造智能散热系统的终极指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trendi…...

网约摩的席卷县城:2公里收费超网约车,外卖员排队加入引争议

2026年春&#xff0c;一场由“网约摩的”掀起的出行变革正席卷广东、湖南多地县城。在茂名、乐昌、衡东等地&#xff0c;一款名为“摩的一下”的网约摩托车平台悄然上线&#xff0c;其定价模式引发热议&#xff1a;起步价6元/2公里&#xff0c;折合每公里高达3元&#xff0c;短…...

从南向北:基于iot-gon的电力规约转换与数据贯通实践

1. 电力规约转换的痛点与iot-gon的解决方案 在电力自动化系统中&#xff0c;设备间的通信就像一群说着不同方言的人开会。变电站用IEC104、电表用DLT645、配电终端用Modbus——这种"语言不通"的情况会导致数据孤岛。我参与过某省电网调度系统改造项目&#xff0c;现场…...

惠普ZBook 15 G2黑苹果双屏实战:EDID提取+Clover注入保姆级教程(附亮度调节技巧)

惠普ZBook 15 G2黑苹果双屏配置全解析&#xff1a;从EDID提取到亮度优化 当专业用户尝试在惠普ZBook 15 G2上实现黑苹果双屏输出时&#xff0c;往往会遇到内屏无法正常管理的问题。这不仅影响工作效率&#xff0c;还会导致不必要的电量消耗和屏幕损耗。本文将深入探讨一套完整的…...

ComfyUI工作流分享:一键生成社交媒体配图与头像壁纸

ComfyUI工作流分享&#xff1a;一键生成社交媒体配图与头像壁纸 1. ComfyUI简介与核心优势 ComfyUI是一款基于节点式工作流的AI图像生成工具&#xff0c;它通过可视化连接不同功能模块&#xff0c;让用户可以灵活定制图像生成流程。与传统的WebUI界面相比&#xff0c;ComfyUI…...

Room数据库迁移踩坑实录:从手动到自动的完整避坑指南

Room数据库迁移实战&#xff1a;从手动到自动的完整避坑指南 去年在重构一个百万级用户的金融类App时&#xff0c;我们团队在数据库迁移上栽了个大跟头。某个深夜的紧急更新后&#xff0c;部分用户的交易记录突然"消失"&#xff0c;最终排查发现是漏掉了一个Migratio…...