当前位置:Gxlcms > html代码 > 使用HTML5Canvas画柱状图

使用HTML5Canvas画柱状图

时间:2021-07-01 10:21:17 帮助过:47人阅读

效果图:

30272.gif

  1. <!DOCTYPE>
  2. <html>
  3. <head>
  4. <title>Bring Your Charts to Life</title>
  5. <script type="text/javascript">
  6. // chart sample data
  7. var arrVisitors = new Array();
  8. arrVisitors[0] = "2007, 750";
  9. arrVisitors[1] = "2008, 425";
  10. arrVisitors[2] = "2009, 960";
  11. arrVisitors[3] = "2010, 700";
  12. arrVisitors[4] = "2011, 800";
  13. arrVisitors[5] = "2012, 975";
  14. arrVisitors[6] = "2013, 375";
  15. arrVisitors[7] = "2014, 775";
  16. var canvas;
  17. var context;
  18. // chart properties
  19. var cWidth, cHeight, cMargin, cSpace;
  20. var cMarginSpace, cMarginHeight;
  21. // bar properties
  22. var bWidth, bMargin, totalBars, maxDataValue;
  23. var bWidthMargin;
  24. // bar animation
  25. var ctr, numctr, speed;
  26. // axis property
  27. var totLabelsOnYAxis;
  28. // barchart constructor
  29. function barChart() {
  30. canvas = document.getElementById('bchart');
  31. if (canvas && canvas.getContext) {
  32. context = canvas.getContext('2d');
  33. }
  34. chartSettings();
  35. drawAxisLabelMarkers();
  36. drawChartWithAnimation();
  37. }
  38. // initialize the chart and bar values
  39. function chartSettings() {
  40. // chart properties
  41. cMargin = 25;
  42. cSpace = 60;
  43. cHeight = canvas.height - 2 * cMargin - cSpace;
  44. cWidth = canvas.width - 2 * cMargin - cSpace;
  45. cMarginSpace = cMargin + cSpace;
  46. cMarginHeight = cMargin + cHeight;
  47. // bar properties
  48. bMargin = 15;
  49. totalBars = arrVisitors.length;
  50. bWidth = (cWidth / totalBars) - bMargin;
  51. // find maximum value to plot on chart
  52. maxDataValue = 0;
  53. for (var i = 0; i < totalBars; i++) {
  54. var arrVal = arrVisitors[i].split(",");
  55. var barVal = parseInt(arrVal[1]);
  56. if (parseInt(barVal) > parseInt(maxDataValue))
  57. maxDataValue = barVal;
  58. }
  59. totLabelsOnYAxis = 10;
  60. context.font = "10pt Garamond";
  61. // initialize Animation variables
  62. ctr = 0;
  63. numctr = 100;
  64. speed = 10;
  65. }
  66. // draw chart axis, labels and markers
  67. function drawAxisLabelMarkers() {
  68. context.lineWidth = "2.0";
  69. // draw y axis
  70. drawAxis(cMarginSpace, cMarginHeight, cMarginSpace, cMargin);
  71. // draw x axis
  72. drawAxis(cMarginSpace, cMarginHeight, cMarginSpace + cWidth, cMarginHeight);
  73. context.lineWidth = "1.0";
  74. drawMarkers();
  75. }
  76. // draw X and Y axis
  77. function drawAxis(x, y, X, Y) {
  78. context.beginPath();
  79. context.moveTo(x, y);
  80. context.lineTo(X, Y);
  81. context.closePath();
  82. context.stroke();
  83. }
  84. // draw chart markers on X and Y Axis
  85. function drawMarkers() {
  86. var numMarkers = parseInt(maxDataValue / totLabelsOnYAxis);
  87. context.textAlign = "right";
  88. context.fillStyle = "#000";;
  89. // Y Axis
  90. for (var i = 0; i <= totLabelsOnYAxis; i++) {
  91. markerVal = i * numMarkers;
  92. markerValHt = i * numMarkers * cHeight;
  93. var xMarkers = cMarginSpace - 5;
  94. var yMarkers = cMarginHeight - (markerValHt / maxDataValue);
  95. context.fillText(markerVal, xMarkers, yMarkers, cSpace);
  96. }
  97. // X Axis
  98. context.textAlign = 'center';
  99. for (var i = 0; i < totalBars; i++) {
  100. arrval = arrVisitors[i].split(",");
  101. name = arrval[0];
  102. markerXPos = cMarginSpace + bMargin
  103. + (i * (bWidth + bMargin)) + (bWidth/2);
  104. markerYPos = cMarginHeight + 10;
  105. context.fillText(name, markerXPos, markerYPos, bWidth);
  106. }
  107. context.save();
  108. // Add Y Axis title
  109. context.translate(cMargin + 10, cHeight / 2);
  110. context.rotate(Math.PI * -90 / 180);
  111. context.fillText('Visitors in Thousands', 0, 0);
  112. context.restore();
  113. // Add X Axis Title
  114. context.fillText('Year Wise', cMarginSpace +
  115. (cWidth / 2), cMarginHeight + 30 );
  116. }
  117. function drawChartWithAnimation() {
  118. // Loop through the total bars and draw
  119. for (var i = 0; i < totalBars; i++) {
  120. var arrVal = arrVisitors[i].split(",");
  121. bVal = parseInt(arrVal[1]);
  122. bHt = (bVal * cHeight / maxDataValue) / numctr * ctr;
  123. bX = cMarginSpace + (i * (bWidth + bMargin)) + bMargin;
  124. bY = cMarginHeight - bHt - 2;
  125. drawRectangle(bX, bY, bWidth, bHt, true);
  126. }
  127. // timeout runs and checks if bars have reached
  128. // the desired height; if not, keep growing
  129. if (ctr < numctr) {
  130. ctr = ctr + 1;
  131. setTimeout(arguments.callee, speed);
  132. }
  133. }
  134. function drawRectangle(x, y, w, h, fill) {
  135. context.beginPath();
  136. context.rect(x, y, w, h);
  137. context.closePath();
  138. context.stroke();
  139. if (fill) {
  140. var gradient = context.createLinearGradient(0, 0, 0, 300);
  141. gradient.addColorStop(0, 'green');
  142. gradient.addColorStop(1, 'rgba(67,203,36,.15)');
  143. context.fillStyle = gradient;
  144. context.strokeStyle = gradient;
  145. context.fill();
  146. }
  147. }
  148. </script>
  149. <noscript>
  150. This chart is unavailable because JavaScript is disabled on your computer. Please enable
  151. JavaScript and refresh this page to see the chart in action.
  152. </noscript>
  153. </head>
  154. <body onLoad="barChart();">
  155. <canvas id="bchart" height="400" width="600">Your browser does not support HTML5 Canvas
  156. </canvas>
  157. </body>
  158. </html>

相关文章:

html5生成柱状图(条形图)效果的实例代码

使用html实现简单的柱状图效果

以上就是使用HTML5 Canvas画柱状图的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行