echarts學(xué)習(xí)筆記之圖表自適應(yīng)問題詳解
前言
為了直觀查看公司服務(wù)器各個(gè)進(jìn)程占用的內(nèi)存動(dòng)態(tài)情況,我使用echarts進(jìn)行數(shù)據(jù)可視化,具體的實(shí)現(xiàn)過程按下不表。
最后實(shí)現(xiàn)的效果如圖:
然后問題就來了,因UI采用了Bootstrap響應(yīng)式框架,所以除了圖表之外其他都是響應(yīng)式。當(dāng)窗口縮小后,就會(huì)發(fā)生很尷尬的出界事件。
如圖:
針對這個(gè)問題,剛開始的解決思路及方法:把echart容器的寬度設(shè)置為100%;
<div class="col-sm-12 row" id="logic1_node" style="width:100%;height:700px"></div>
這樣之后依然存在問題:頁面初始的寬度是多少,canvas寬度就是多少,之后不會(huì)再變化。
便嘗試通過jsDOM操作,強(qiáng)行令canvas的寬度為100%,however too young too simple!
調(diào)整瀏覽器寬度發(fā)現(xiàn),canvas畫布的寬度是隨之變化的,然而畫布里面的圖表內(nèi)容卻像被擠壓在一起的餡餅,模糊扭曲了。
到這里細(xì)心的同學(xué)可以發(fā)現(xiàn),echart圖表一旦繪制成功,內(nèi)容就不會(huì)再變化。所以對于echart圖表,其"響應(yīng)式"應(yīng)該是可以隨著窗口調(diào)整不斷被重新繪制,不是簡單的調(diào)整寬高。
到echart官網(wǎng)看了Example,發(fā)現(xiàn)官網(wǎng)的實(shí)例都具有響應(yīng)式功能,確實(shí)不是單純的寬度改變,是每次調(diào)整后圖表是重新繪制。猜想echart源碼里應(yīng)該有resize這個(gè)API,打開調(diào)試器,打開echart源碼,Ctrl+F,果然找到了。
再仔細(xì)查看官方文檔:
echart圖表本身是提供了一個(gè)resize的函數(shù)的。
于是當(dāng)瀏覽器發(fā)生resize事件的時(shí)候,讓其觸發(fā)echart的resize事件,重繪canvas。(也可以通過其他事件觸發(fā))
附:Echarts 頁面多圖自適應(yīng)的解決辦法
網(wǎng)上看到有不少人使用Echarts抽象出來的框架,實(shí)現(xiàn)自適應(yīng)的效果代碼:window.onresize = option.chart.resize()
, 這個(gè)代碼基本是官網(wǎng)上的window.onresize = myCharts.resize();
的翻版。
但在實(shí)際的應(yīng)用中一個(gè)頁面可能會(huì)有好幾個(gè)Echarts圖表,而使用window.onresize = option.chart.resize()
,加載頁面圖表后,頁面上只有一個(gè)圖表會(huì)根據(jù)瀏覽器的變化而自適應(yīng)。如果要是頁面上的圖表都要自適應(yīng)。則需要將resize事件疊加在不同的圖上面,使用一下代碼可以實(shí)現(xiàn)。
window.addEventListener("resize", function () { option.chart.resize(); });
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
javascript實(shí)現(xiàn)一個(gè)數(shù)值加法函數(shù)
這篇文章主要介紹了javascript實(shí)現(xiàn)一個(gè)數(shù)值加法函數(shù),十分的簡單實(shí)用,方便大家理解javascript,有需要的小伙伴可以參考下。2015-06-06JS中append字符串包含onclick無效傳遞參數(shù)失敗的解決方案
這篇文章主要介紹了JS中append字符串包含onclick無效傳遞參數(shù)失敗的解決方案,需要的朋友可以參考下2016-12-12獲取URL地址中的文件名和參數(shù)的javascript代碼
JS 獲取URL地址中的文件名和參數(shù),這個(gè)版本中有詳細(xì)的注釋。2009-09-09php讀取sqlite數(shù)據(jù)庫入門實(shí)例代碼
本文介紹了php讀取sqlite數(shù)據(jù)庫的簡單例子,php編程中操作sqlite入門實(shí)例,有需要的朋友可以參考下2014-06-06用JS實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲
這篇文章主要為大家詳細(xì)介紹了用JS實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06Wordpress ThickBox 點(diǎn)擊圖片顯示下一張圖的修改方法
Wordpress自帶的ThickBox特效中,單擊圖片會(huì)調(diào)用 tb_remove 以關(guān)閉特效窗口,現(xiàn)將修改其動(dòng)作為顯示下一張圖。2010-12-12