asimryu

canvas chart-2

Jul 13th, 2017
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 2.81 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>HTML5 Canvas</title>
  6.     <link rel="stylesheet" href="css/bootstrap.css">
  7.     <script src="js/jquery-3.2.1.min.js"></script>
  8. </head>
  9. <body>
  10.     <canvas id="mycanvas" width="500" height="500"></canvas>
  11.     <table id="browsers" class="table table-hover">
  12.         <tr class="title">
  13.             <td>구분</td>
  14.             <td class="browser" data-color="#00A9DB">IE</td>
  15.             <td class="browser" data-color="#D500DB">Chrome</td>
  16.             <td class="browser" data-color="#0062DB">FireFox</td>
  17.             <td class="browser" data-color="#DBA100">Safari</td>
  18.         </tr>
  19.         <tr class="data">
  20.             <td class="year">2017</td>
  21.             <td class="users">25</td>
  22.             <td class="users">51</td>
  23.             <td class="users">15</td>
  24.             <td class="users">12</td>
  25.         </tr>
  26.         <tr class="data">
  27.             <td class="year">2016</td>
  28.             <td class="users">35</td>
  29.             <td class="users">45</td>
  30.             <td class="users">10</td>
  31.             <td class="users">15</td>
  32.         </tr>
  33.         <tr class="data">
  34.             <td class="year">2015</td>
  35.             <td class="users">50</td>
  36.             <td class="users">30</td>
  37.             <td class="users">25</td>
  38.             <td class="users">18</td>
  39.         </tr>
  40.     </table>
  41.     <script>
  42.         var c = document.getElementById("mycanvas");
  43.         var ctx = c.getContext("2d");
  44.         var browserinfo = $("#browsers .title .browser");
  45.         var browsers = [];
  46.         var colors = [];
  47.         for(var k=0; k<browserinfo.length;k++){
  48.             var b = $(browserinfo[k]).text();
  49.             var c = $(browserinfo[k]).attr("data-color");
  50.             browsers.push(b);
  51.             colors.push(c);
  52.         }
  53.  
  54.         $(".data").on("mouseover",function(){
  55.             var tds = $(this).children(".users");
  56.             var rates = [];
  57.             for( var i=0; i<tds.length; i++ ){
  58.                 var users = $(tds[i]).text();
  59.                 users = parseInt(users,10);
  60.                 rates.push(users);
  61.             }
  62.             var tdyear = $(this).children(".year");
  63.             var year = $(tdyear[0]).text();
  64.             drawChart(rates);
  65.             ctx.beginPath();
  66.             ctx.fillStyle = "white";
  67.             ctx.font = "20px Arial";
  68.             ctx.textAlign = "center";
  69.             ctx.fillText(year,250,250);        
  70.         });
  71.  
  72.         function drawChart(rates){
  73.  
  74.             var total = 0;
  75.             for(var i=0; i<rates.length; i++){
  76.                 total += rates[i];
  77.             }
  78.             var start = 0;
  79.             var end = 0;
  80.             for(var j=0; j<rates.length; j++){
  81.                 ctx.beginPath();
  82.                 ctx.moveTo(250,250);
  83.                 end = start + ( (rates[j]/total)*2*Math.PI );
  84.                 ctx.arc(250,250,250,start,end);
  85.                 ctx.fillStyle = colors[j];
  86.                 ctx.fill();
  87.                 var angle = start + 2*Math.PI*((rates[j]/total)/2);
  88.                 var pos = getTextPos(250,250,250/2,angle);
  89.                 ctx.fillStyle = "white";
  90.                 ctx.font = "15px Arial";
  91.                 ctx.textAlign = "center";
  92.                 ctx.fillText(browsers[j],pos[0],pos[1]);
  93.                 console.log(pos[0] + "/" + pos[1]);
  94.                 start = end;
  95.             }  
  96.         }
  97.    
  98.         function getTextPos(x,y,r,angle){
  99.             var tx = x + Math.cos(angle)*r;
  100.             var ty = y + Math.sin(angle)*r;
  101.             return [tx, ty];
  102.         }
  103.  
  104.  
  105.     </script>
  106. </body>
  107. </html>
Advertisement
Add Comment
Please, Sign In to add comment