Google pie chart 插件的使用

下列代码可实现选中多个slice饼图

<html>  
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">google.charts.load(current, {
        packages: [corechart]
      });
      var currentSelection = [false, false, false, false];
      google.charts.setOnLoadCallback(drawChart);

      function drawChart() {
        var chart = new google.visualization.PieChart(document.getElementById(piechart));
/*        下面的data用hard code写死,当然也可以利用ajax向后台请求获得JSON数据,格式如下:
*         {
*  "cols": [
*        {
         
  "id":"","label":"Topping","pattern":"","type":"string"},
*        {
         
  "id":"","label":"Slices","pattern":"","type":"number"}
*      ],
*  "rows": [
*        {
         
  "c":[{
         
  "v":"Mushrooms","f":null},{
         
  "v":3,"f":null}]},
*        {
         
  "c":[{
         
  "v":"Onions","f":null},{
         
  "v":1,"f":null}]},
*        {
         
  "c":[{
         
  "v":"Olives","f":null},{
         
  "v":1,"f":null}]},
*        {
         
  "c":[{
         
  "v":"Zucchini","f":null},{
         
  "v":1,"f":null}]},
*        {
         
  "c":[{
         
  "v":"Pepperoni","f":null},{
         
  "v":2,"f":null}]}
*      ]
*}
*/       
        var data = new google.visualization.DataTable();
        data.addColumn(string, TVModels);
        data.addColumn(number, Amount);
        data.addRows([[32HFL5011T/12, 333], [47HFL7011T/12, 2], [32HFL3009T/12, 22], [32HFL5009T/12, 10]]);
        var options = {
          sliceVisibilityThreshold: 0,
          pieSliceText: percentage,// 显示百分比,如果要显示具体值,需要配置为pieSliceText: value
          chartArea: {
            left: 10,
            top: 10,
            width: 100%,
            height: 90%
          },
          tooltip: {
            trigger: none,
            text: value
          }
        };

        function selectHandler() {//选中某块slice触发的回调函数
          var selectArray = [];
          for (var i = 0,
          len = currentSelection.length; i < len; i++) {
            if (currentSelection[i]) {
              var rowObj = {
                row: i
              };
              selectArray.push(rowObj);
            }
          }
          chart.setSelection(selectArray);
        }

        function clickHandler(targetID) {//点击某个slice的回调函数
          if (targetID) {
            var targetID = targetID["targetID"];
            var sliceTargetIDText = "slice#";
            var legendTargendIDText = "legendentry#";
            var textToRemove = "";
            var sliceNum = 0;

            //判断点击对象:legend或者slice
            if (targetID.search(sliceTargetIDText) == 0) {
              textToRemove = sliceTargetIDText;
            } else if (targetID.search(legendTargendIDText) == 0) {
              textToRemove = legendTargendIDText;
            } else {
              return;
            }
            //提取slice号并更新到被选中的slice数组里。
            sliceNum = Number(targetID.replace(textToRemove, ""));
            currentSelection[sliceNum] = !currentSelection[sliceNum]; //toggle
          }
        }
        //注册点击及选中handler回调函数以支持多重选中slice
        google.visualization.events.addListener(chart, select, selectHandler);
        google.visualization.events.addListener(chart, click, clickHandler);
        chart.draw(data, options);
      }</script>
  </head>

  <body>
    <div id="tvmodelspie" style="width: 500px; height: 250px;">
      <h3 align="center" class="piechartheader">TV Models</h3>
      <div id="piechart"></div>
    </div>
  </body>
</html>
经验分享 程序员 微信小程序 职场和发展