تعامل با نمودار

آنچه تا کنون پوشش داده ایم برای بسیاری از صفحات وب کافی است: شما نمودار خود را در صفحه ترسیم کرده اید. با این حال، اگر می‌خواهید کلیک‌های کاربر را دریافت کنید، یا نیاز به دستکاری ویژگی‌ها یا داده‌ها در نموداری که قبلاً ترسیم کرده‌اید، دارید، باید به رویدادهای پرتاب شده توسط نمودار گوش دهید.

همه نمودارها انواعی از رویدادها را نشان می دهند. در اینجا رایج ترین آنها هستند:

  • آماده - زمانی که نمودار بر روی صفحه رسم می شود پرتاب می شود و آماده پاسخگویی به روش ها است. اگر نیاز به درخواست اطلاعات از نمودار دارید، به این رویداد گوش دهید.
  • انتخاب - زمانی که کاربر چیزی را در نمودار انتخاب می‌کند پرتاب می‌شود: معمولاً با کلیک کردن روی یک نوار یا برش پای.
  • خطا - زمانی که نمودار نمی تواند داده های ارسال شده را ارائه کند، پرتاب می شود، معمولاً به این دلیل که قالب DataTable اشتباه است.
  • onmouseover و onmouseout - زمانی که کاربر به ترتیب ماوس را روی یک عنصر نمودار خاص یا خاموش می کند، پرتاب می شود.

گوش دادن به رویدادها ساده است. به سادگی google.visualization.events.addListener() را فراخوانی کنید که در یک دسته به نمودار منتقل می شود، نام رویدادی که می خواهید گرفت، و نام کنترل کننده ای که باید هنگام پرتاب رویداد فراخوانی کنید. شما می توانید این متد را با هر دسته نموداری فراخوانی کنید، حتی اگر هنوز draw() را فراخوانی نکرده باشید. توجه داشته باشید که اگر می‌خواهید شنونده قبل از حذف خودش دقیقاً یک بار فراخوانی شود، می‌توانید با google.visualization.events.addOneTimeListener() تماس بگیرید.

در اینجا یک قطعه کد جزئی وجود دارد که نحوه ثبت نام برای گرفتن رویداد انتخابی نمودار را نشان می دهد:

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

}

شکل زیر نمونه کد 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>

اطلاعات بیشتر