ここまでに説明した内容では、グラフを描画した多くのウェブページで十分です。しかし、ユーザーのクリックを把握したい場合、またはすでに描画済みのプロパティやデータを操作する必要がある場合は、グラフによってスローされたイベントをリッスンする必要があります。
すべてのグラフで、なんらかのイベントがスローされます。最も多い原因は次のとおりです。
- ready - ページにグラフが描画され、メソッドに応答できるときにスローされます。グラフの情報をリクエストする必要がある場合は、このイベントをリッスンします。
- select - ユーザーがグラフ上の項目を選択したときにスローされます。通常はバーまたは円グラフのスライスをクリックすることで発生します。
- error -
DataTable
の形式が正しくないため、渡されたデータをグラフでレンダリングできない場合にスローされます。 - onmouseover と onmouseout: ユーザーが特定のグラフ要素にカーソルを合わせるかカーソルを外したときにスローされます。
イベントのリッスンは簡単です。google.visualization.events.addListener()
を呼び出して、ハンドルをグラフに渡す、キャッチするイベントの名前、イベントがスローされたときに呼び出すハンドラの名前を渡すだけです。このメソッドは、draw()
をまだ呼び出していない場合でも、任意のグラフ ハンドルで呼び出すことができます。リスナーを削除する前に google.visualization.events.addOneTimeListener()
を呼び出すことで、リスナーを一度だけ呼び出すことができます。
部分的なコード スニペットは、グラフの select イベントをキャッチするために登録する方法を示す部分的なコードです。
load libraries...
function drawChart() {
prepare data...
var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
// The select handler. Call the chart's getSelection() method
function selectHandler() {
var selectedItem = chart.getSelection()[0];
if (selectedItem) {
var value = data.getValue(selectedItem.row, selectedItem.column);
alert('The user selected ' + value);
}
}
// Listen for the 'select' event, and call my function selectHandler() when
// the user selects something on the chart.
google.visualization.events.addListener(chart, 'select', selectHandler);
draw the chart...
}
新しい select イベント リスナーを使った Hello Charts コードの例を以下に示します。実際に試す
<html>
<head>
<!--Load the AJAX API-->
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
// Load the Visualization API and the piechart package.
google.charts.load('current', {'packages':['corechart']});
// Set a callback to run when the Google Visualization API is loaded.
google.charts.setOnLoadCallback(drawChart);
// Callback that creates and populates a data table,
// instantiates the pie chart, passes in the data and
// draws it.
function drawChart() {
// Create the data table.
var data = new google.visualization.DataTable();
data.addColumn('string', 'Topping');
data.addColumn('number', 'Slices');
data.addRows([
['Mushrooms', 3],
['Onions', 1],
['Olives', 1],
['Zucchini', 1],
['Pepperoni', 2]
]);
// Set chart options
var options = {'title':'How Much Pizza I Ate Last Night',
'width':400,
'height':300};
// Instantiate and draw our chart, passing in some options.
var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
function selectHandler() {
var selectedItem = chart.getSelection()[0];
if (selectedItem) {
var topping = data.getValue(selectedItem.row, 0);
alert('The user selected ' + topping);
}
}
google.visualization.events.addListener(chart, 'select', selectHandler);
chart.draw(data, options);
}
</script>
</head>
<body>
<!--Div that will hold the pie chart-->
<div id="chart_div" style="width:400; height:300"></div>
</body>
</html>
詳細情報