ここまでに説明した内容では、グラフを描画した多くのウェブページで十分です。しかし、ユーザーのクリックを把握したい場合、またはすでに描画済みのプロパティやデータを操作する必要がある場合は、グラフによってスローされたイベントをリッスンする必要があります。
すべてのグラフで、なんらかのイベントがスローされます。最も多い原因は次のとおりです。
- 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>
詳細情報