背景:
目前時(shí)間是 2021-5-31,后面如果距離這個(gè)時(shí)間段比較遠(yuǎn)了,不排除作者已經(jīng)修復(fù)了這個(gè)問題
vue-table 版本: vxe-table 4.0+(Next)
vue 版本: 3.0+
遇到的問題
列設(shè)置了fixed="left", 可是在滾動(dòng)中,左邊的列依然是會(huì)滾動(dòng)
先說原因,再說詳情
原因
系統(tǒng)自動(dòng)開啟了虛擬滾動(dòng),我啟用了span-method,二者應(yīng)該是產(chǎn)生某些沖突了。導(dǎo)致fixed固定列效果失敗。
詳情
之前代碼大致如下(無關(guān)緊要的代碼用 *** 表示):
<vxe-table
:data="tableData"
:span-method="colSpan"
border
show-overflow
show-header-overflow
max-height="100%"
>
<vxe-table-column field="name" :title="project.name" width="120px" fixed="left" align="left"></vxe-table-column>
<vxe-table-column field="amuId" title="ID" width="120px" fixed="left" header-align="center" align="left"> ****** </vxe-table-column>
<vxe-table-column title="操作" width="100px" fixed="left"> ****** </vxe-table-column>
<vxe-table-column
v-for="day in daysArray"
:field="day"
:title="day.slice(5)"
width="60px"
>
<template #default="{row}">
{{ row[day] ? row[day].p : '' }}
</template>
</vxe-table-column>
</vxe-table>
-
還沒有橫向滾動(dòng)的時(shí)候,是正常的:
X軸未滾動(dòng) -
橫向滾動(dòng)一部分的時(shí)候,開始錯(cuò)位:
部分X軸滾動(dòng) -
橫向滾動(dòng)比較多后,固定列全部隱藏
固定列全部隱藏了
解決之道
還是得仔細(xì)看文檔
- ① Console面板有一個(gè)警告信息
? [vxe-table] 啟用虛擬滾動(dòng)后不支持該參數(shù) "span-method" -
② API文檔有這么一段:
API文檔摘圖
起初,我看運(yùn)行沒有什么問題,就習(xí)慣性忽略了①的警告信息。后來實(shí)在找不到原因,才想著去仔細(xì)閱讀文檔和看警告信息。這個(gè)問題搞了我一天。其實(shí)是很簡單的一個(gè)原因,可是因?yàn)闆]有仔細(xì)看文檔,結(jié)果白白浪費(fèi)了不少時(shí)間。
解決方案
既然是虛擬滾動(dòng)惹的禍,那把虛擬滾動(dòng)關(guān)掉就可以了。
關(guān)于虛擬滾動(dòng),文檔有一段話是這樣描述的:
虛擬滾動(dòng)(最大可以支撐 10w 列、30w 行)
高性能的虛擬渲染,默認(rèn)情況下,如果設(shè)置了 height、max-height 則會(huì)根據(jù)觸發(fā)規(guī)則自動(dòng)啟用虛擬渲染,觸發(fā)規(guī)則由 scroll-x.gt | scroll-y.gt 設(shè)置。虛擬滾動(dòng)啟用后只會(huì)渲染指定范圍內(nèi)的可視區(qū)數(shù)據(jù),其他的數(shù)據(jù)將被卷去收起,當(dāng)滾動(dòng)到可視區(qū)時(shí)才被渲染出來
(注:啟用虛擬滾動(dòng)后:show-overflow,show-header-overflow,show-footer-overflow 參數(shù)將根據(jù)不同場景各自觸發(fā)生效,無法取消;如果需要支持,將虛擬滾動(dòng)關(guān)閉即可)
我的代碼,只需要給vxe-table添加屬性來關(guān)閉虛擬滾動(dòng),就可以了。
當(dāng)然,性能方面嘛,妥協(xié)一下啦。數(shù)據(jù)少時(shí),用戶無感的
關(guān)鍵屬性:
:scroll-x="{enable: false, gt: -1}"
:scroll-y="{enable: false, gt: -1}"
完整一點(diǎn)的代碼是:
<vxe-table
:data="tableData"
:scroll-x="{enable: false, gt: -1}"
:scroll-y="{enable: false, gt: -1}"
:span-method="colSpan"
border
show-overflow
show-header-overflow
max-height="100%"
>
<vxe-table-column field="name" :title="project.name" width="120px" fixed="left" align="left"></vxe-table-column>
*** ***
</vxe-table>
至此,問題解決。拖動(dòng)滾動(dòng)條后,左邊列能正常固定:

后話
既然這些問題,工具作者都有在文檔中提到,那就不能叫Bug,頂多可以說是一些有待完善提高的地方吧。
期待作者完善。



