2011-08-08 27 views
14

HighCharts是否有任何onReady(或類似的)準備事件?Highcharts的onReady事件?

目前,HighCharts只提供addSeriesclickloadredrawselection的圖表對象(http://www.highcharts.com/ref/#chart-events)。顯然load應該是「在準備就緒」事件時觸發的,但事實並非如此。它的觸發事件「時的數據加載」

這裏是他們有load樣本:http://jsfiddle.net/hgbQm/

這裏是上面的代碼顯示了chart的修改版本時load被解僱是沒有準備好:http://jsfiddle.net/QzKky/1/

有什麼想法?

或者,我將需要做一個延遲的呼叫,但這將是如此醜陋。謝謝!

回答

18

的確,延遲呼叫並不是一個很好的方法。該load事件工作正常,但目前的圖表是由this關鍵字簡稱,即

// create the chart 
var chart = new Highcharts.Chart({ 
    chart: { 
     renderTo: 'container', 
     events: { 
      load: function(event) { 
       //When is chart ready? 
       console.log(this); //this refers to the loaded chart. 
      } 
     }   
    }, 
    xAxis: { 
    }, 

    series: [{ 
     animation: false, 
     data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]  
    }] 
}); 

Demo

希望這有助於:)

+0

哎呀,太好了,我忘了'this' :)謝謝!被ExtJS EventManager過多所寵愛。哈哈。謝謝! –

3

這絕對是比公認的答案那麼優雅,但仍可以通過幾行代碼正常工作。本質是隻輪詢所有圖表容器HTML元素。

下面的代碼假定必須附着到具有類=「圖表」的元素的一個或多個Highcharts:

var chartsToLoad = []; 

$('.chart').each(function(n,elem) { 

    chartsToLoad[n] = window.setInterval(function() { 

     if(typeof($(elem).highcharts()) !== 'undefined') { 

      // It's loaded now, go ahead... 
      $(elem).highcharts().doSomeHighchartsStuffHere() 

      // Permanently stop polling 
      window.clearInterval(chartsToLoad[n]); 
     } 

    }, 100); // Check every 100ms 


}); 
+0

很適合我這個解決方案,因爲'plotOptions.series.animation.complete'回調不起作用,並且加載回調啓動得太早 – rjbultitude

+0

對我來說也很好,因爲我想在更新之後進行更新(例如tickInterval等)系列數據是可用的,因此,'加載'和'重繪'事件都不會起作用!然而,我仍然面臨的一個問題是,在更新完成後,在最終呈現之前,我會獲得中間臨時視覺狀態。有沒有簡單的方法來保持圖表狀態爲加載,直到window.clearInterval被調用?感謝您發佈您的解決方案! –

5

Highcharts.Chart constructor採用被稱爲「當圖表對象被完成加載和渲染一個回調參數」。圖表對象作爲參數傳遞給回調函數。

$("#the-chart").highcharts(options, function (chart) { 
    alert("The chart is ready now"); 
    console.log("chart", chart); 
}); 

圖表(對象的選擇,功能的回調) 這是創建一個新的圖表對象的構造。

參數

  • 選項:對象
    圖表選項,標題左側菜單中的「選項對象」中的記載。

  • 回調函數
    當圖表對象完成加載和呈現時執行的函數。在大多數情況下,圖表是在一個線程中構建的,但在Internet Explorer 8或更低版本圖表中有時會在文檔準備好之前啓動,並且在這些情況下,在調用new Highcharts.Chart()之後,圖表對象不會直接完成。因此,依賴新建Chart對象的代碼應始終在回調中運行。定義chart.event.load處理程序是等效的。

返回