doughnut.html 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <title>Doughnut Chart</title>
  5. <script src="../../dist/Chart.min.js"></script>
  6. <script src="../utils.js"></script>
  7. <style>
  8. canvas {
  9. -moz-user-select: none;
  10. -webkit-user-select: none;
  11. -ms-user-select: none;
  12. }
  13. </style>
  14. </head>
  15. <body>
  16. <div id="canvas-holder" style="width:40%">
  17. <canvas id="chart-area"></canvas>
  18. </div>
  19. <button id="randomizeData">Randomize Data</button>
  20. <button id="addDataset">Add Dataset</button>
  21. <button id="removeDataset">Remove Dataset</button>
  22. <button id="addData">Add Data</button>
  23. <button id="removeData">Remove Data</button>
  24. <button id="changeCircleSize">Semi/Full Circle</button>
  25. <script>
  26. var randomScalingFactor = function() {
  27. return Math.round(Math.random() * 100);
  28. };
  29. var config = {
  30. type: 'doughnut',
  31. data: {
  32. datasets: [{
  33. data: [
  34. randomScalingFactor(),
  35. randomScalingFactor(),
  36. randomScalingFactor(),
  37. randomScalingFactor(),
  38. randomScalingFactor(),
  39. ],
  40. backgroundColor: [
  41. window.chartColors.red,
  42. window.chartColors.orange,
  43. window.chartColors.yellow,
  44. window.chartColors.green,
  45. window.chartColors.blue,
  46. ],
  47. label: 'Dataset 1'
  48. }],
  49. labels: [
  50. 'Red',
  51. 'Orange',
  52. 'Yellow',
  53. 'Green',
  54. 'Blue'
  55. ]
  56. },
  57. options: {
  58. responsive: true,
  59. legend: {
  60. position: 'top',
  61. },
  62. title: {
  63. display: true,
  64. text: 'Chart.js Doughnut Chart'
  65. },
  66. animation: {
  67. animateScale: true,
  68. animateRotate: true
  69. }
  70. }
  71. };
  72. window.onload = function() {
  73. var ctx = document.getElementById('chart-area').getContext('2d');
  74. window.myDoughnut = new Chart(ctx, config);
  75. };
  76. document.getElementById('randomizeData').addEventListener('click', function() {
  77. config.data.datasets.forEach(function(dataset) {
  78. dataset.data = dataset.data.map(function() {
  79. return randomScalingFactor();
  80. });
  81. });
  82. window.myDoughnut.update();
  83. });
  84. var colorNames = Object.keys(window.chartColors);
  85. document.getElementById('addDataset').addEventListener('click', function() {
  86. var newDataset = {
  87. backgroundColor: [],
  88. data: [],
  89. label: 'New dataset ' + config.data.datasets.length,
  90. };
  91. for (var index = 0; index < config.data.labels.length; ++index) {
  92. newDataset.data.push(randomScalingFactor());
  93. var colorName = colorNames[index % colorNames.length];
  94. var newColor = window.chartColors[colorName];
  95. newDataset.backgroundColor.push(newColor);
  96. }
  97. config.data.datasets.push(newDataset);
  98. window.myDoughnut.update();
  99. });
  100. document.getElementById('addData').addEventListener('click', function() {
  101. if (config.data.datasets.length > 0) {
  102. config.data.labels.push('data #' + config.data.labels.length);
  103. var colorName = colorNames[config.data.datasets[0].data.length % colorNames.length];
  104. var newColor = window.chartColors[colorName];
  105. config.data.datasets.forEach(function(dataset) {
  106. dataset.data.push(randomScalingFactor());
  107. dataset.backgroundColor.push(newColor);
  108. });
  109. window.myDoughnut.update();
  110. }
  111. });
  112. document.getElementById('removeDataset').addEventListener('click', function() {
  113. config.data.datasets.splice(0, 1);
  114. window.myDoughnut.update();
  115. });
  116. document.getElementById('removeData').addEventListener('click', function() {
  117. config.data.labels.splice(-1, 1); // remove the label first
  118. config.data.datasets.forEach(function(dataset) {
  119. dataset.data.pop();
  120. dataset.backgroundColor.pop();
  121. });
  122. window.myDoughnut.update();
  123. });
  124. document.getElementById('changeCircleSize').addEventListener('click', function() {
  125. if (window.myDoughnut.options.circumference === Math.PI) {
  126. window.myDoughnut.options.circumference = 2 * Math.PI;
  127. window.myDoughnut.options.rotation = -Math.PI / 2;
  128. } else {
  129. window.myDoughnut.options.circumference = Math.PI;
  130. window.myDoughnut.options.rotation = -Math.PI;
  131. }
  132. window.myDoughnut.update();
  133. });
  134. </script>
  135. </body>
  136. </html>