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


    解决方法

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

    前言

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

    1. 项目目录
      在这里插入图片描述

    一、页面table使用

    1. 添加:max-height,和id
    <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()
    <script setup name="Activity">
    	import useTableHeightStore from '@/store/modules/table'
    	const tableHeightStore = useTableHeightStore()
    	onActivated(() => {
    	  useTableHeightStore().setTableHeight()
    	})
    	onMounted(() => {
    	  useTableHeightStore().setTableHeight()
    	})
    </script>
    

    二、store状态库

    1.引入库

    代码如下(table.js):

    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()
    // })
    

    效果

    在这里插入图片描述

  • 相关阅读:
    10.什么是递归插槽及使用方式
    Linux mac Windows三系统 局域网文件共享方法
    【数据库入门】关系型数据库为什么这么受欢迎?
    【实用技巧】Unity的Text组件实用技巧
    Spring事务的概念(四大特性)
    百度地图有感
    【C++】单例模式
    三年半经验,成功拿下字节阿里网易offer
    荐书丨《好奇心的秘密》:一个针尖上可以站多少跳舞的小天使?
    【AIGC未来的发展方向】面向人工智能的第一步,一文告诉你人工智能是什么以及未来的方向分析
  • 原文地址:https://blog.csdn.net/shiyibushiwei/article/details/139646875