今天做專案遇到一個省份過多時,要加捲軸的需求。但是切換資料的時候,出現上圖所出現的問題。
經查資料,發現可以設定一個屬性來解決這個問題。
filterMode: 'empty'
dataZoom: {
show: this.xiaonengXData.length>12?true:false, // 為true 捲軸出現
realtime: this.xiaonengXData.length>12?true:false, // 實時更新
type:'slider', // 有type這個屬性,捲軸在最下面,也可以不行,寫y:36,這表示距離頂端36px,一般就是在圖上面。
height: 20, // 表示捲軸的高度,也就是粗細
start: this.xiaonengXData.length>12?20:0, // 表示預設展示20%~80%這一段。
end: this.xiaonengXData.length>12?80:100,
bottom: 0,
filterMode: 'empty'
}
dataZoom
的執行原理是透過 資料過濾
以及在內部設定軸的顯示視窗來達到 資料視窗縮放
的效果。
資料過濾模式(dataZoom.filterMode)的設定不同,效果也不同。
可選值為:
filter
當前資料視窗外的資料,被 過濾掉。即 會 影響其他軸的資料範圍。每個資料項,只要有一個維度在資料視窗外,整個資料項就會被過濾掉。
weakFilter
當前資料視窗外的資料,被 過濾掉。即 會 影響其他軸的資料範圍。每個資料項,只有當全部維度都在資料視窗同側外部,整個資料項才會被過濾掉。
empty
當前資料視窗外的資料,被設定為空。即 不會 影響其他軸的資料範圍。
none
不過濾資料,只改變數軸範圍。
如何設定,由使用者根據場景和需求自己決定。經驗來說:
- 當『只有 X 軸 或 只有 Y 軸受
dataZoom
元件控制』時,常使用filterMode: 'filter'
,這樣能使另一個軸自適應過濾後的數值範圍。 - 當『X 軸 Y 軸分別受
dataZoom
元件控制』時:- 如果 X 軸和 Y 軸是『同等地位的、不應互相影響的』,比如在『雙數值軸散點圖』中,那麼兩個軸可都設為
fiterMode: 'empty'
。 - 如果 X 軸為主,Y 軸為輔,比如在『柱狀圖』中,需要『拖動
dataZoomX
改變 X 軸過濾柱子時,Y 軸的範圍也自適應剩餘柱子的高度』,『拖動dataZoomY
改變 Y 軸過濾柱子時,X 軸範圍不受影響』,那麼就 X軸設為fiterMode: 'filter'
,Y 軸設為fiterMode: 'empty'
,即主軸'filter'
,輔軸'empty'
。
- 如果 X 軸和 Y 軸是『同等地位的、不應互相影響的』,比如在『雙數值軸散點圖』中,那麼兩個軸可都設為
這裡將其設定為 empty 就可以避免該問題。