el-table高度自适应_镶嵌html如何自适应

el-table高度自适应_镶嵌html如何自适应分析如下图(此方案中使用的是ElementTable官网copy的代码(多用于OA,CMS,ERP这类系统中)如上图大体目前没有问题,但是存在细节问题那就是在table在滚动的过程中表头没有了如果说这里的列比较多,用户需要查看的数据在最后面,每次某个列的数据对应的是什么意思(尤其是表格数字比较多的话,非常恼火),需要上下来回滚动table内容才能解决所以说我们要解决的就是表头固定①(标记…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

分析

如下图(此方案中使用的是Element Table官网copy的代码(多用于OA, CMS, ERP这类系统中)

488adbc3b27c56c352d0de328d7d1372.gif

如上图大体目前没有问题,但是存在细节问题那就是在table在滚动的过程中表头没有了

如果说这里的列比较多,用户需要查看的数据在最后面,每次某个列的数据对应的是什么意思(尤其是表格数字比较多的话,非常恼火),需要上下来回滚动table 内容才能解决

所以说我们要解决的就是表头固定 ①(标记问题)

表头固定简单 官方提供prop => height,那继续看下图

dd595b6af8edf887e5a0d93ce1b1917e.png

我们的用户群在使用产品的过程中, 不可能说是固定用同样大小屏幕

假设我们这里设置了固定高度600px

那有些用户使用过程中 将窗口缩小了 不够600px

就会出现 table的body中一个滚动条 table外面的容器出现一个滚动条

还有就是有些用户使用的是大屏幕,很显然600px可能只占了他屏幕的一半,这里数据又多

就又出现新的问题,明明我屏幕可以显示完,产品这里只占了一半 然后开始滚动

所以新的问题高度如何设置,才能使我们适应各种用户②

我们这里想到一个办法,动态计算并且将table的height设置为父节点的height

那父节点不管是flex: 1,还是height:100%,都能够适应

问题

我们需要解决上面两个问题

要解决的就是表头固定

高度如何设置,才能使我们适应各种用户

表头固定

这里表头固定还是使用Element UI官方提供的方案——设置height

复制代码export default {

data() {

const item = {

date: “2016-05-02”,

name: “王小虎”,

address: “上海市普陀区金沙江路 1518 弄”

};

return {

// 模拟数据

tableData: Array(100).fill(item),

// 随便定义一个初始高度防止报错

height: “200px”

};

}

}

复制代码

如上设置height设置好了table表头固定

高度如何设置

上面设置好了表头固定, 继续我们要动态设置height为父节点的height

并且给el-table设置 id

这里需要注意的是 我们在设置为父节点的height的过程中假设父节点有padding值我们需要减掉

export default {

methods: {

// 这个方法用来动态设置 height

getAutoHeight() {

let el = document.querySelector(“#tableData”),

elParent = el.parentNode,

pt = this.getStyle(elParent, “paddingTop”),

pb = this.getStyle(elParent, “paddingBottom”);

// 一定要使用 nextTick 来改变height 不然不会起作用

this.$nextTick(() => {

this.height = elParent.clientHeight – (pt + pb) + “px”;

});

},

// 获取样式 我们需要减掉 padding-top, padding-bottom的值

getStyle(obj, attr) {

// 兼容IE浏览器

let result = obj.currentStyle

? obj.currentStyle[attr].replace(“px”, “”)

: document.defaultView

.getComputedStyle(obj, null)[attr].replace(“px”, “”);

return Number(result);

}

}

}

复制代码

高度设置好了,我们需要在挂载结束后的钩子函数中调用 此方法

export default {

mounted() {

this.getAutoHeight();

}

}

复制代码

那基本已经离结束不远了 , 继续看图

b0f41f2c7b48cd3d26f0a750e38ab109.gif

但是这里又产生了新的问题,那就是 如果窗口大小改变, 那原来的height就不适用于现在的height

来来来 继续看图 就会出现两个滚动条

ae41b4023f4e360d907a6eefb1648e41.png

解决这个问题的办法 需要做两个操作

在window.onresize中调用我们设置的 获取高度的方法

export default {

mounted() {

this.getAutoHeight();

const self = this;

window.onresize = function(){

self.getAutoHeight();

};

}

}

复制代码

并且将父级节点CSS设置为overflow: hidden

我这里使用的官网示例代码 我的如下

.el-main {

overflow: hidden !important;

}

复制代码

最终成果

我这里用控制台的高度 模拟窗口高度变化

d8c5aef6ca89846954f455cb6207146f.gif

完整代码如下

ASIDE

HRADER

name: “AutoHeightTable”,

data() {

const item = {

date: “2016-05-02”,

name: “王小虎”,

address: “上海市普陀区金沙江路 1518 弄”

};

return {

tableData: Array(100).fill(item),

height: “200px”

};

},

mounted() {

this.getAutoHeight();

const self = this;

window.onresize = function(){

self.getAutoHeight();

};

},

methods: {

getAutoHeight() {

let el = document.querySelector(“#tableData”),

elParent = el.parentNode,

pt = this.getStyle(elParent, “paddingTop”),

pb = this.getStyle(elParent, “paddingBottom”);

this.$nextTick(() => {

this.height = elParent.clientHeight – (pt + pb) + “px”;

});

},

getStyle(obj, attr) {

// 兼容IE浏览器

let result = obj.currentStyle

? obj.currentStyle[attr].replace(“px”, “”)

: document.defaultView

.getComputedStyle(obj, null)[attr].replace(“px”, “”);

return Number(result);

}

}

};

height: 100%;

width: 100%;

overflow: hidden;

}

.el-header {

background-color: #b3c0d1;

color: #333;

line-height: 60px;

}

.el-aside {

color: #333;

}

.el-main {

overflow: hidden !important;

}

复制代码

上面代码只是一种思路

更多的解决方案

还是得从业务出发进行封装

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196437.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • go语言微服务之RPC协议[通俗易懂]

    go语言微服务之RPC协议[通俗易懂]1什么是RPCRemoteProcedureCallProtocol–远程过程调用协议!IPC:进程间通信RPC:远程进程通信–应用层协议(http协议同层),底层用TCP实现。理解RPC:像调用本地函数一样,去调用远程函数。通过rpc协议,传递:函数名,函数参数。达到在本地,调用远端函数,得返回值到本地的目标。 为什么微服务要使用RPC:每个服务都被封转成进程,彼此“独立”。 进程与进程之间,可以使用不同的语言实现。2RPC使用的步骤服务端:注册rpc

    2022年5月12日
    56
  • 奔图打印机显示未连接_奔图打印机常见故障及解决方法

    奔图打印机显示未连接_奔图打印机常见故障及解决方法奔图打印机常见故障及解决方法如何应对打印机卡纸?卡纸是激光打印机用户最常遇到的问题,造成卡纸的原因有很多,那么如何能够避免卡纸或降低卡纸的机率呢,我们需要注意以下几个方面:Ÿ尽量不要二次用纸,因为打印过一次的纸经过加热会造成纸张柔韧性下降,更加易断易碎容易造成卡纸。Ÿ使用平整的纸张,褶皱或折角的纸更容易卡在机器内部造成卡纸。Ÿ使用质量较好的纸张,一些质量不好的复印纸容易产生大量的纸屑长时间使…

    2022年6月2日
    83
  • phpstorm激活码2021【注册码】

    phpstorm激活码2021【注册码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    32
  • 空间尺度分析图_尺度空间理论

    空间尺度分析图_尺度空间理论SIFT简介整理一下方便阅读,作者写的东西摘自论文,在此感谢xiaowei等的贡献DoG尺度空间构造(Scale-spaceextremadetection)http://blog.csdn.net/xiaowei_cqu/article/details/8067881 关键点搜索与定位(Keypointlocalization)http://blog.csdn.net/xi…

    2022年10月14日
    4
  • MySQL mysqldump数据导出详解

    MySQL mysqldump数据导出详解

    2022年2月11日
    42
  • redisson和jedis区别_redisson和redis区别

    redisson和jedis区别_redisson和redis区别Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)和Zset(有序集合)。redis与spring的整合一般分为spring-data-redis整合和jedis整合,先看看两者的区别1、引用的依赖不同:spring-data-redis使用的依赖如下: <dependency> <groupId>org.springframework..

    2025年5月28日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号