1.Element的table表高度自适应vue3+js写法

解决方法

在页面table上添加id,动态计算每页table的最大高度 ,将高度保存在store中,每次切换路由时进行计算。

文章目录

前言

提示:状态管理使用的是pinia,用法参考简单学习pinia

  1. 项目目录

一、页面table使用

  1. 添加:max-height,和id
html 复制代码
<el-table :max-height="tableHeightStore.height" id="elTableId" >
      <el-table-column type="selection" width="30" align="center" />
      <el-table-column label="标题" fixed align="center" prop="title" width="180" />
</el-table>
  1. js部分,引入高度tableHeightStore.height,计算高度方法useTableHeightStore().setTableHeight()
javascript 复制代码
<script setup name="Activity">
	import useTableHeightStore from '@/store/modules/table'
	const tableHeightStore = useTableHeightStore()
	onActivated(() => {
	  useTableHeightStore().setTableHeight()
	})
	onMounted(() => {
	  useTableHeightStore().setTableHeight()
	})
</script>

二、store状态库

1.引入库

代码如下(table.js):

javascript 复制代码
const useTableHeightStore = defineStore(
    'table-height',
    {
      state: () => ({
        height: 500,//默认高度
    }),
    getters:{},
    actions:{
      setHeight(height) {
        this.height=height//高度赋值
      },
      setTableHeight() {
        //计算高度:窗口高度-表格距离顶部距离-固定高度(底部页码高度)
        this.height= window.innerHeight -document.getElementById("elTableId").getBoundingClientRect().top - 52;
        //问题:在浏览器窗口缩放90%时,table表的滚动条会消失(max-height丢失),解决:操作dom添加
        document.querySelector('#elTableId .el-scrollbar__wrap').style.maxHeight = this.height - 40 + "px"
        console.log("路由切换table高度刷新",this.height);
        window.onresize = () => {
          console.log("-----","防抖");
          debounce(tableHeightFun, 200); //防抖
        };
        let that=this
        function tableHeightFun() {
          //页面没有table的id时,不执行
          if(document.getElementById('elTableId')==null)return
          //问题:在路由切换后,窗口高度变高,table表的max-height不能变大。解决:先赋值变小,再变大。
          that.height = window.innerHeight - document.getElementById('elTableId').getBoundingClientRect().top - 52 - 1;
          document.querySelector('#elTableId .el-scrollbar__wrap').style.maxHeight = (that.height - 40 - 1) + "px"
          setTimeout(() => {
            that.height=  window.innerHeight -document.getElementById("elTableId").getBoundingClientRect().top -52;
            document.querySelector('#elTableId .el-scrollbar__wrap').style.maxHeight = (that.height - 40) + "px"
            console.log("--tableHeightFun---",that.height);
          }, 200);
        }
        var timeout = null; //定义一个定时器
        function debounce(fn, wait) {
          if (timeout !== null) clearTimeout(timeout); //清除这个定时器
          timeout = setTimeout(fn, wait);
        }
      }
    }
})

export default useTableHeightStore

// table添加
// :max-height="tableHeightStore.height" id="elTableId"

// 页面引入
// import useTableHeightStore from '@/store/modules/table'
// const tableHeightStore = useTableHeightStore()

// 路由状态-缓存-每次进入页面触发onActivated
// onActivated(() => {
//   useTableHeightStore().setTableHeight()
// })

// 路由状态-不缓存-每次进入页面触发onMounted
// onMounted(() => {
//   useTableHeightStore().setTableHeight()
// })

效果

相关推荐
福兮说9 分钟前
前端下载大文件,点了按钮半天没反应:fetch + blob 的三个问题和三种替代写法
前端·javascript·性能优化·文件下载
GreenTea17 分钟前
我把 Agent 的 while 循环拆掉了:一种你可能没想到的 Agent 架构
前端·后端·架构
科技观察哨34 分钟前
六足平台选型与纳米定位系统集成:HEB-640六自由度位移台在半导体光刻对准中的参数边界与国产替代评估
前端·人工智能
niucloud-admin1 小时前
JAVA V6 多商户商城 开发文档——web前端
前端
颜进强1 小时前
16 · NestJS LifecycleEvents 生命周期事件:五个钩子、三条边界,和 rag-server 的优雅停机
前端·后端·ai编程
今年下半年3 小时前
【VUE】整合腾讯地图、自定义区域边界、村委名称及资产统计(放大显示资产点位)
前端·javascript·vue.js
郑州光合科技余经理3 小时前
同城电商系统:库存变更怎么同步到订单
java·开发语言·前端·后端·uni-app·php·ai编程
前端snow4 小时前
ai agent --- DeepAgents 中间件
前端
data analyse 4565 小时前
报表能自定义的国内统计工具有哪些
前端·数据分析