[S'enregister] - [S'identifier]
gheop wall

Pie

JavaScript
par Anonymous (06/02/08)
Cacher les numéros de lignes
  1. window.onload = function() {
  2. (
  3. function() {
  4. pie('mydata',300,300);
  5. }
  6. )()
  7. }
  8.  
  9. function pie(table_id, width, height,id) {
  10. var data_table = document.getElementById(table_id);
  11. //document.body.innerHTML = '<canvas id="canvas" height="300" width="300"></canvas>';
  12. var canvas = document.getElementById('canvas');
  13. //document.createElement('canvas'); ne marche pas sous IE :(
  14. // canvas.id = id;
  15. //canvas.height=height;
  16. //canvas.width=width;
  17. var td_index = 1;
  18. var tds, data = [], color, colors = [], value = 0, total = 0;
  19. var trs = data_table.getElementsByTagName('tr');
  20. for (var i = 0; i < trs.length; i ) {
  21. tds = trs[i].getElementsByTagName('td');
  22. if (tds.length === 0) continue;
  23. value = parseFloat(tds[td_index].innerHTML);
  24. data[data.length] = value;
  25. total = value;
  26. color = getColor();
  27. colors[colors.length] = color;
  28. trs[i].style.backgroundColor = color;
  29. }
  30. if (typeof canvas.getContext === 'undefined') return;
  31. var ctx = canvas.getContext('2d');
  32. var canvas_size = [canvas.width, canvas.height];
  33. var radius = Math.min(canvas_size[0], canvas_size[1]) / 2;
  34. var center = [canvas_size[0]/2, canvas_size[1]/2];
  35. var sofar = 0;
  36. for(var y =Math.min(canvas_size[0], canvas_size[1]) / 10 ; y >= 0; y--)
  37. {
  38. ctx.save();
  39. ctx.translate(0,y);
  40. ctx.scale(1,0.55);
  41. for (var piece in data) {
  42. var thisvalue = data[piece] / total;
  43. ctx.beginPath();
  44. ctx.moveTo(center[0], center[1]);
  45. ctx.arc(center[0],
  46. center[1],
  47. radius,
  48. Math.PI * (- 0.5 2 * sofar),
  49. Math.PI * (- 0.5 2 * (sofar thisvalue)),
  50. false
  51. );
  52. ctx.lineTo(center[0], center[1]);
  53. ctx.closePath();
  54. if(y == 0) {
  55. ctx.globalAlpha = 1;
  56. ctx.fillStyle = colors[piece];
  57. ctx.fill();
  58. }
  59. else if(y < 2) {
  60. ctx.globalAlpha = 0.2;
  61. ctx.fillStyle = '#000';
  62. ctx.fill();
  63. }
  64. else {
  65. ctx.globalAlpha = 0.6;
  66. ctx.fillStyle = colors[piece];
  67. ctx.fill();
  68. }
  69. sofar = thisvalue;
  70. }
  71. ctx.restore();
  72. }
  73. function getColor() {
  74. var rgb = [];
  75. for (var i = 0; i < 3; i )
  76. rgb[i] = Math.round(100 * Math.random() 155);
  77. return 'rgb(' rgb.join(',') ')';
  78. }
  79. document.body.appendChild(canvas);
  80. }
  81.