antdvue表格滚动页面固定表头
页面滚动固定表头思路由于直接控制antd表的表头置顶会导致表头样式丢失,获取每列的宽度设置太麻烦,最后决定使用两张表,一张只作为固定表头,不分配数据。具体方法中,传入的财物支付给两个表,隐藏表头表的内容部分,当滚动页面超出内容表时,显示表头表。template:data-source="[]"表头表的数据为空v-loading="false"避免出现两个loading
js代码import{defineComponent,nextTick,onMounted,onUnmounted,PropType,reactive,ref,unref,}from'vue';exportdefaultdefineComponent({setup(){consttableRef=ref();constisShowHead=ref(false);functionscrollLeft(){constel=unref(tableRef);consttableBody=document.getElementsByClassName('ant-table-body')[1];constfixedTableBody=document.getElementsByClassName('ant-table-body')[0];//实现内容表和头表滚动联动tableBody.addEventListener('scroll',()=>{fixedTableBody.scrollLeft=tableBody.scrollLeft;});fixedTableBody.addEventListener('scroll',()=>{tableBody.scrollLeft=fixedTableBody.scrollLeft;});}functionsrollListener(){constel=unref(tableRef);constscrollTop=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop;//滚动大于表格到页面顶部高度时,显示固定表头if(scrollTop>el.$el.offsetTop){isShowHead.value=true;}else{isShowHead.value=false;}}onMounted(async()=>{constel=unref(tableRef);//确保表创建成功if(el){awaitnextTick();window.addEventListener('scroll',scrollListener,true)向左滚动();}});onUnmounted(()=>{window.removeEventListener('scroll',scrollListener,true)});返回{tableRef,isShowHead,};},});cssstyle.w1-table-fixed{位置:固定;顶部:0;z-指数:999;溢出:隐藏;.ant-table-body{//隐藏滚动条&::-webkit-scrollbar{display:none;}}.ant-table-placeholder{//隐藏表头内容display:none!important;}}有问题,但是这种方法就是在显示表头的时候会有卡顿的感觉。如果有好的优化方法欢迎评论告诉我