Vue中使用Echarts可視化圖表寬度自適應(yīng)的完美解決方案
一、問題闡述:
開發(fā)H5項目中應(yīng)用到Echarts數(shù)據(jù)可視化,由于H5主要使用在手機,屏幕寬度大大限制了圖表的展現(xiàn),問題如下。
上圖中x軸的數(shù)據(jù)是動態(tài)的,從2022年切換到2021年數(shù)據(jù)變化,此時如果x軸的數(shù)據(jù)過多就會顯得格外擁擠。
二、解決思路:
我的解決方案是,在放置Echarts的容器(div)外層再套一層容器(div),外層容器寬度固定設(shè)置手機屏幕寬,并設(shè)置溢出顯示滾動條(width: 100%;overflow: auto),內(nèi)層Echarts容器寬度初始寬為100%,如果數(shù)據(jù)大于設(shè)定的量時,就加大放置Echarts的容器寬度。
本以為能順利解決問題時,然而效果并不盡人意,效果如下。
1. 容器寬度改變了
2. 滾動條出現(xiàn)
3. 圖表未加寬到容器寬度
其實每次更改篩選條件都會從新創(chuàng)建實例,但Echarts圖表并未按照預(yù)期加寬,感覺就像緩存了最初設(shè)定的容器寬度一樣。
仔細(xì)看文檔才發(fā)現(xiàn),原來Echarts圖表本身是提供了一個resize的函數(shù)專門處理這類問題。
三、最終效果:
完整代碼如下
<!-- 學(xué)生統(tǒng)計 折線圖 HTML部分 --> <div class="stuCensus_box"> <div id="student_census" class="student_census" ref="student_census" ></div> </div> // js部分 學(xué)生統(tǒng)計 折線圖 initStudentCensus() { // 根據(jù)x軸內(nèi)容長短設(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)建可視化圖表實例
3. resize重繪可視化圖表
效果如下
到此這篇關(guān)于Vue中使用Echarts可視化圖表,寬度自適應(yīng)解決方案的文章就介紹到這了,更多相關(guān)Vue Echarts可視化圖表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue-calendar-component日歷組件報錯Clock is not defi
這篇文章主要為大家介紹了vue-calendar-component日歷組件報錯Clock is not defined解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11vue實現(xiàn)下拉框的多選功能(附后端處理參數(shù))
本文介紹了如何使用Vue實現(xiàn)下拉框的多選功能,實現(xiàn)了在選擇框中選擇多個選項的功能,文章詳細(xì)介紹了實現(xiàn)步驟和示例代碼,對于想要了解如何使用Vue實現(xiàn)下拉框多選功能的讀者具有一定的參考價值2023-08-08使用vue-element-admin框架調(diào)用后端接口及跨域的問題
這篇文章主要介紹了使用vue-element-admin框架調(diào)用后端接口及跨域的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11Vue源碼解析之Template轉(zhuǎn)化為AST的實現(xiàn)方法
這篇文章主要介紹了Vue源碼解析之Template轉(zhuǎn)化為AST的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12Vue實現(xiàn)一個動態(tài)添加行的表格步驟詳解
在Vue組件中定義表格的數(shù)據(jù)模型,通常使用一個數(shù)組來存儲表格的數(shù)據(jù),每一行數(shù)據(jù)可以是一個對象,對象的屬性對應(yīng)表格的列,這篇文章主要介紹了Vue實現(xiàn)一個動態(tài)添加行的表格步驟詳解,需要的朋友可以參考下2024-05-05vue3+elementUI實現(xiàn)懸浮多行文本輸入框效果
這篇文章主要為大家詳細(xì)介紹了vue3如何引用elementUI實現(xiàn)懸浮文本輸入框效果,以便實現(xiàn)多行文本輸入,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-10-10