vote_show.html 6.0 KB

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