vxe-table fixed無效,固定列依然會(huì)滾動(dòng)--解決辦法

背景:

目前時(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,頂多可以說是一些有待完善提高的地方吧。
期待作者完善。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容