在開發過程中遇到這樣個問題:
利用bootstrap中的tab欄,每當點擊tab欄的導航時,echats僅僅只渲染第一個tab的內容,切換tab時,echats圖表不顯示。
其html代碼為:
1 <div class="col-xs-6" style="padding:10px;"> 2 <ul class="nav nav-tabs" id="myTab1"> 3 <li><a href="##" style="font-weight: 700;color:black;">訪客年齡統計</a></li> 4 <li class="active"><a href="#home11" data-id="0">年</a></li> 5 <li><a href="#home12" data-id="1">月</a></li> 6 <li><a href="#home13" data-id="2">日</a></li> 7 </ul> 8 <div class="tab-content"> 9 <div class="tab-pane active" id="home11"> 10 <!-- echarts容器 --> 11 <div class="chart"> 12 <div id="main_11" style="height:400px;"></div> 13 </div> 14 </div> 15 <div class="tab-pane" id="home12"> 16 <div class="chart"> 17 <div id="main_12" style="height:400px;"></div> 18 </div> 19 </div> 20 <div class="tab-pane" id="home13"> 21 <div class="chart"> 22 <div id="main_13" style="height:400px;"></div> 23 </div> 24 </div> 25 </div> 26 </div>
js代碼為:
1 var myChart11 = echarts.init(document.getElementById('main_11')); 2 var myChart12 = echarts.init(document.getElementById('main_12')); 3 var myChart13 = echarts.init(document.getElementById('main_13')); 4 // 指定圖表的配置項和數據 5 option = { 6 title: { 7 text: '', 8 left: 'center' 9 }, 10 tooltip: { 11 trigger: 'item', 12 formatter: '{a} <br/>{b} : {c}' 13 }, 14 legend: { 15 left: 'left', 16 data: ['全部', '男', '女'] 17 }, 18 xAxis: { 19 type: 'category', 20 name: 'x', 21 splitLine: { show: false }, 22 data: ['2017-1', '2017-2', '2017-3', '2017-4', '2017-5', '2017-6', '2017-7', '2017-8', '2017-9'] 23 }, 24 grid: { 25 left: '3%', 26 right: '4%', 27 bottom: '3%', 28 containLabel: true 29 }, 30 yAxis: { 31 type: 'log', 32 name: 'y' 33 }, 34 series: [ 35 { 36 name: '全部', 37 type: 'line', 38 data: [15, 53, 29, 27, 36, 86, 71, 168, 66] 39 }, 40 { 41 name: '男', 42 type: 'line', 43 data: [12, 22, 16, 8, 16, 32, 6, 68, 26] 44 }, 45 { 46 name: '女', 47 type: 'line', 48 data: [3, 32, 14, 16, 18, 52, 17, 32, 12] 49 } 50 ] 51 }; 52 // 使用剛指定的配置項和數據顯示圖表。 53 myChart11.setOption(option);
54 myChart12.setOption(option);
55 myChart13.setOption(option);
此代碼的結果為上邊圖片所展示的效果,經過查找之后發現“月”和“日”所對應的echats圖表的寬度為0,根本就沒有畫在所對應的盒子中,也就是說根本就沒有渲染。
后來經過查資料發現了一個方法可以解決這個問題,那便是給tab欄中的導航欄注冊“shown.bs.tab”事件,在事件里邊讓每個echats渲染一遍。
1 var arr=[]; 2 var myChart11 = echarts.init(document.getElementById('main_11')); 3 var myChart12 = echarts.init(document.getElementById('main_12')); 4 var myChart13 = echarts.init(document.getElementById('main_13')); 5 // 指定圖表的配置項和數據 6 option = { 7 title: { 8 text: '', 9 left: 'center' 10 }, 11 tooltip: { 12 trigger: 'item', 13 formatter: '{a} <br/>{b} : {c}' 14 }, 15 legend: { 16 left: 'left', 17 data: ['全部', '男', '女'] 18 }, 19 xAxis: { 20 type: 'category', 21 name: 'x', 22 splitLine: { show: false }, 23 data: ['2017-1', '2017-2', '2017-3', '2017-4', '2017-5', '2017-6', '2017-7', '2017-8', '2017-9'] 24 }, 25 grid: { 26 left: '3%', 27 right: '4%', 28 bottom: '3%', 29 containLabel: true 30 }, 31 yAxis: { 32 type: 'log', 33 name: 'y' 34 }, 35 series: [ 36 { 37 name: '全部', 38 type: 'line', 39 data: [15, 53, 29, 27, 36, 86, 71, 168, 66] 40 }, 41 { 42 name: '男', 43 type: 'line', 44 data: [12, 22, 16, 8, 16, 32, 6, 68, 26] 45 }, 46 { 47 name: '女', 48 type: 'line', 49 data: [3, 32, 14, 16, 18, 52, 17, 32, 12] 50 } 51 ] 52 }; 53 // 使用剛指定的配置項和數據顯示圖表。 54 myChart11.setOption(option); 55 arr.push(myChart11); 56 myChart12.setOption(option); 57 arr.push(myChart12); 58 myChart13.setOption(option); 59 arr.push(myChart13); 60 // 給tab導航按鈕注冊事件,讓其渲染 61 $('#myTab1 li a').on('shown.bs.tab', function (e) { 62 for (var i = 0; i < arr.length; i++) { 63 arr[i].resize(); 64 } 65 }); 66 // 當瀏覽器窗口大小出現變化時,重新渲染 67 $(window).resize(function () { 68 for (var i = 0; i < arr.length; i++) { 69 arr[i].resize(); 70 } 71 });
僅僅只是添加了一個數組,將要渲染的盒子方法添加到數組里邊,當事件被觸發的時候,通過遍歷這個數組,將這些方法再調用一次,這樣就可以解決以上問題。