Vue中使用Echarts可視化圖表寬度自適應(yīng)的完美解決方案
一、問(wèn)題闡述:
開發(fā)H5項(xiàng)目中應(yīng)用到Echarts數(shù)據(jù)可視化,由于H5主要使用在手機(jī),屏幕寬度大大限制了圖表的展現(xiàn),問(wèn)題如下。

上圖中x軸的數(shù)據(jù)是動(dòng)態(tài)的,從2022年切換到2021年數(shù)據(jù)變化,此時(shí)如果x軸的數(shù)據(jù)過(guò)多就會(huì)顯得格外擁擠。
二、解決思路:
我的解決方案是,在放置Echarts的容器(div)外層再套一層容器(div),外層容器寬度固定設(shè)置手機(jī)屏幕寬,并設(shè)置溢出顯示滾動(dòng)條(width: 100%;overflow: auto),內(nèi)層Echarts容器寬度初始寬為100%,如果數(shù)據(jù)大于設(shè)定的量時(shí),就加大放置Echarts的容器寬度。
本以為能順利解決問(wèn)題時(shí),然而效果并不盡人意,效果如下。

1. 容器寬度改變了
2. 滾動(dòng)條出現(xiàn)
3. 圖表未加寬到容器寬度
其實(shí)每次更改篩選條件都會(huì)從新創(chuàng)建實(shí)例,但Echarts圖表并未按照預(yù)期加寬,感覺就像緩存了最初設(shè)定的容器寬度一樣。
仔細(xì)看文檔才發(fā)現(xiàn),原來(lái)Echarts圖表本身是提供了一個(gè)resize的函數(shù)專門處理這類問(wèn)題。
三、最終效果:
完整代碼如下
<!-- 學(xué)生統(tǒng)計(jì) 折線圖 HTML部分 -->
<div class="stuCensus_box">
<div
id="student_census"
class="student_census"
ref="student_census"
></div>
</div>
// js部分 學(xué)生統(tǒng)計(jì) 折線圖
initStudentCensus() {
// 根據(jù)x軸內(nèi)容長(zhǎng)短設(shè)定echarts的寬度
if (this.stuCensus_xAxis.length > 9) {
this.$refs.student_census.style.width = "200%";
} else if (this.stuCensus_xAxis.length > 5) {
this.$refs.student_census.style.width = "130%";
} else {
this.$refs.student_census.style.width = "100%";
}
var myChart = this.$echarts.init(this.$refs.student_census);
var option = {
tooltip: {
trigger: "axis",
extraCssText: "max-height: 200px; overflow: auto;", // 設(shè)置懸浮窗樣式
position: function (pos, params, dom) {
dom.style.pointerEvents = "auto"; // 修改懸浮窗不可綁定事件的css屬性
},
},
legend: {
type: "scroll",
data: this.stuCensus_legend,
},
grid: {
top: "14%",
left: "0",
right: "1%",
bottom: "3%",
containLabel: true,
},
xAxis: {
type: "category",
data: this.stuCensus_xAxis,
axisLabel: { rotate: 45 },
},
yAxis: {
type: "value",
axisLabel: axisLabel,
},
series: this.stuCensusSeries,
};
myChart.setOption(option, true);
myChart.resize(); // 調(diào)用此API更新echarts的寬高才能生效
},1. 用$refs設(shè)定容器寬度。
2. setOption創(chuàng)建可視化圖表實(shí)例
3. resize重繪可視化圖表
效果如下

到此這篇關(guān)于Vue中使用Echarts可視化圖表,寬度自適應(yīng)解決方案的文章就介紹到這了,更多相關(guān)Vue Echarts可視化圖表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何通過(guò)Vue3+Element?Plus自定義彈出框組件
這篇文章主要給大家介紹了關(guān)于如何通過(guò)Vue3+Element?Plus自定義彈出框組件的相關(guān)資料,彈窗是前端開發(fā)中的一種常見需求,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-05-05
vue-cli自定義創(chuàng)建項(xiàng)目eslint依賴沖突解決方式
vue-cli是vue.js的腳手架,用于自動(dòng)生成vue.js+webpack的項(xiàng)目模板,在創(chuàng)建項(xiàng)目時(shí),如果遇到npm安裝報(bào)錯(cuò),通常是由于依賴版本沖突造成的,文中通過(guò)圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09
vue項(xiàng)目中按需引入element-ui的正確實(shí)現(xiàn)方法
這篇文章主要介紹了vue項(xiàng)目中按需引入element-ui的正確實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
Vue項(xiàng)目創(chuàng)建首頁(yè)發(fā)送axios請(qǐng)求的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目創(chuàng)建首頁(yè)發(fā)送axios請(qǐng)求的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-02-02
vue組件中傳值EventBus的使用及注意事項(xiàng)說(shuō)明
這篇文章主要介紹了vue組件中傳值EventBus的使用及注意事項(xiàng)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
vue element 關(guān)閉當(dāng)前tab 跳轉(zhuǎn)到上一路由操作
這篇文章主要介紹了vue element 關(guān)閉當(dāng)前tab 跳轉(zhuǎn)到上一路由操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07
vue頁(yè)面使用阿里oss上傳功能的實(shí)例(一)
本篇文章主要介紹了vue頁(yè)面使用阿里oss上傳功能的實(shí)例(一),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08

