asimryu

canvas pie chart - 1

Jan 12th, 2017
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 5 2.67 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html lang="ko">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>Document</title>
  6.     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
  7.     <style>
  8.         .wrap {
  9.             width: 300px;
  10.             margin: 20px auto;
  11.         }
  12.     </style>
  13. </head>
  14. <body>
  15.     <div class="wrap">
  16.         <table class="table-chart table table-boardered table-hover">
  17.             <tbody>
  18.                 <tr>
  19.                     <td>구분</td>
  20.                     <td data-color="red">1월</td>
  21.                     <td data-color="green">2월</td>
  22.                     <td data-color="blue">3월</td>
  23.                 </tr>
  24.                 <tr>
  25.                     <td>HTML</td>
  26.                     <td>20</td>
  27.                     <td>50</td>
  28.                     <td>34</td>
  29.                 </tr>
  30.                 <tr>
  31.                     <td>CSS</td>
  32.                     <td>30</td>
  33.                     <td>10</td>
  34.                     <td>5</td>
  35.                 </tr>
  36.                 <tr>
  37.                     <td>JavaScript</td>
  38.                     <td>80</td>
  39.                     <td>60</td>
  40.                     <td>100</td>
  41.                 </tr>
  42.             </tbody>
  43.         </table>   
  44.         <canvas id="webclass" width="300" height="300"></canvas>
  45.     </div>
  46.     <script src="http://code.jquery.com/jquery-latest.js"></script>
  47.     <script>
  48.         var canvas = document.getElementById('webclass');
  49.         var ctx = canvas.getContext("2d");
  50.         var w = canvas.width;
  51.         var h = canvas.height;
  52.         var r = w / 2;
  53.         var x = w / 2;
  54.         var y = h / 2;
  55.  
  56.         function getarc(x,y,r,angle){
  57.             return [x+Math.cos(angle)*r,y+Math.sin(angle)*r];
  58.         }
  59.  
  60.         var titles = []; //new Array();
  61.         var colors = [];
  62.         $(function(){
  63.             $ths = $(".table-chart > tbody > tr:first-child > td:first-child").siblings();
  64.             for(var i=0; i < $ths.length; i++){
  65.                 titles[i] = $( $ths[i] ).text();
  66.                 colors[i] = $( $ths[i] ).attr("data-color");
  67.             }
  68.             $(".table-chart > tbody > tr").not(':first').mouseover(function(){
  69.                     var subject = $(this).children("td:first-child").text();
  70.                     var $tds = $(this).children("td").not(':first');
  71.                     var data = [];
  72.                     var total = 0;
  73.                     for(var i=0; i<$tds.length; i++){
  74.                         data[i] = parseInt( $($tds[i]).text(),10);
  75.                         total += data[i];
  76.                     }
  77.                     ctx.clearRect(0,0,w,h);
  78.                     var start = 0;
  79.                     for(var i=0; i<data.length; i++){
  80.                         var pcnt = data[i] / total;
  81.                         var end = start + 2*Math.PI*pcnt;
  82.                         ctx.beginPath();
  83.                         ctx.fillStyle = colors[i];
  84.                         ctx.moveTo(x,y);
  85.                         ctx.arc(x,y,r,start,end);
  86.                         ctx.moveTo(x,y)
  87.                         ctx.fill();
  88.  
  89.                         // Label
  90.                         var pos = getarc(x,y,r/1.7,start + 2*Math.PI*(pcnt/2));
  91.                         ctx.fillStyle = 'white';
  92.                         ctx.font = "15px Malgun Gothic";
  93.                         ctx.textAlign = "center";
  94.                         ctx.fillText(titles[i], pos[0], pos[1]);
  95.                         ctx.fillText(data[i], pos[0], pos[1]+18);
  96.                         start = end;
  97.                     }
  98.                 }
  99.             );
  100.         });
  101.     </script>
  102. </body>
  103. </html>
Advertisement
Add Comment
Please, Sign In to add comment