Interazione con il grafico

Ciò di cui abbiamo parlato finora è sufficiente per molte pagine web: ad esempio, abbiamo tracciato il grafico. Tuttavia, se vuoi acquisire i clic degli utenti o devi manipolare proprietà o dati di un grafico che hai già disegnato, devi ascoltare gli eventi generati dal grafico.

Tutti i grafici generano alcuni tipi di eventi. Di seguito sono riportati quelli più comuni:

  • ready: genera quando il grafico viene disegnato sulla pagina e pronto per rispondere ai metodi. Ascolta questo evento se devi richiedere informazioni dal grafico.
  • select: seleziona quando un utente seleziona qualcosa sul grafico, generalmente facendo clic su una barra o una porzione di torta.
  • error: genera quando il grafico non può eseguire il rendering dei dati trasmessi, in genere perché il formato DataTable è errato.
  • onmouseover e onmouseout: vengono attivati quando l'utente passa il mouse sopra o in corrispondenza di uno specifico elemento del grafico.

Ascoltare gli eventi è semplice: basta chiamare google.visualization.events.addListener() passando un handle al grafico, il nome dell'evento da rilevare e il nome di un gestore da chiamare quando viene lanciato l'evento. Puoi chiamare questo metodo con qualsiasi handle di grafico, anche se non hai ancora chiamato draw(). Tieni presente che puoi chiamare google.visualization.events.addOneTimeListener() se vuoi che l'ascoltatore venga chiamato esattamente una volta prima di rimuoversi.

Ecco uno snippet di codice parziale che mostra come registrarsi per ricevere un evento select di un grafico:

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...

}

Di seguito è mostrato l'esempio di codice Hello grafico con un nuovo listener di eventi selezionato. Fai una prova.

<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>

 

Scopri di più