1. 程式人生 > >echarts切換tab時,第一個圖表顯示,第二個圖表不顯示的解決辦法

echarts切換tab時,第一個圖表顯示,第二個圖表不顯示的解決辦法

首先這種情況,我在網上看到了好多人問,確實也有正解,但是隻是說出了其錯誤出現的原因,並沒有給出解決方法。

我也是深受其害,所以呢,在這裡記錄一下,分享給還在困擾著的你們,迅速找出解決辦法。


首先,我先簡單介紹一下,我這裡出現錯誤的情境。

原來剛剛遇到這個問題的時候,是在點選多個tab選項之後,出現了地圖不顯示的情況,然後呢,我就一直在根據開啟多個tab之後,地圖不顯示這個思路進行尋找bug的原因,後來問了問同事,發現原來這個錯誤的原因,不是因為開啟多個tab頁面導致的,而是因為開啟的多個tab選項其中有一個tab頁面中有地圖的顯示。



當分析到這裡的時候,其實已經對於bug,已經分析了一半了,說到這裡,想當然的會想到是不是因為兩個地圖之間有衝突,有共用的東西或者依賴的jar/js檔案版本太低等問題,我首先是替換了echarts.js的檔案版本問題,發現,並沒有什麼變化,仍舊是第二個頁面沒有地圖顯示,然後我就一直在兩個檔案衝突的海洋裡面遨遊,查找了是否有共用的資料來源或者變數,後來我在測試的時候,發現開啟第一個不能開啟第二個,但是先開啟第一個可以開啟第二個,所以我就把方向轉到了兩者之間的對比上,最後發現第一個裡面設定了時間超時,但是第二個裡面沒有,測試結果發現:成功,bug解決,但是為什麼呢?因為愛情!  

 

我先列舉網上說的幾種情況,我嘛,遇到的問題只是其中的一種原因所導致的。



①:因為var option={}沒有放入ajax請求當中去
②:因為沒有設定高度(如果不理解可以繼續看③)  
③:因為圖表已經載入完畢,但是還沒有高度,雖然我已經在兩個地圖的div中分別設定了高度,但是還是不行(我就是根據這種方法解決的)
解決方案:
上面的載入的時間順序解釋:因為我們寫的呼叫方法是在script中,載入比div中優先,所以出現了載入時間差
我們給script中的呼叫地圖的函式加一個延時呼叫,這樣就會讓div先載入,script後加載

setTimeout(
funtion(){
util.buildMap('引數一','引數二');
},
100)

 

       下面我就說下我在搜尋的時候,遇到很多人都看到的正解,如果你們也遇到這種情況建議參考一下
我是這麼做的,供大家參考。
關鍵就是在tab轉換的時候div是沒有height的,所有要在標籤頁顯示後有了width和height之後再載入圖表。
tab有show.bs.tab和shown.bs.tab兩種,要選擇shown顯示後的

Javascript code

$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
       // 獲取已啟用的標籤頁的名稱
       var
activeTab = $(e.target)[0].hash; if(activeTab=="#day-div") loadDay();//載入圖表 if(activeTab=="#week-div") loadWeek(); if(activeTab=="#month-div") loadMonth(); });