[关闭]
@MickeyWang 2018-06-12T14:57:10.000000Z 字数 1458 阅读 382

settimeoutCode

  1. <html lang="en">
  2. <head>
  3. <meta charset="UTF-8">
  4. <title>canvas绘制饼图</title>
  5. <script>
  6. /**
  7. * 绘制饼图
  8. * @param {array} data_arr 扇形比例的数组
  9. * @param {array} color_arr 每个扇形的颜色数组
  10. */
  11. function drawCircle(data_arr, color_arr) {
  12. var canvas = document.getElementById('canvas_circle');
  13. var ctx = canvas.getContext('2d');
  14. var radius = canvas.height / 2 - 20; //半径
  15. var ox = radius + 20,
  16. oy = radius + 20; //圆心
  17. var startAngle = 0; //起始弧度
  18. var endAngle = 0; //结束弧度
  19. var color = '';
  20. var time = 200; //毫秒数
  21. var endTemp = '';
  22. var angleStep = '';
  23. for (var i = 0; i < data_arr.length; i++) {
  24. //第一个扇形的起始角度
  25. i == 0 ? startAngle = 0 : "";
  26. //准备画扇形的数据
  27. endAngle = startAngle + data_arr[i] * Math.PI * 2; //结束弧度
  28. angleStep = (data_arr[i] * Math.PI * 2) / time; //画扇形时的增长步长
  29. color = color_arr[i];
  30. //开始画扇形
  31. myLoop(startAngle, endAngle, ctx, angleStep, ox, oy, radius, color);
  32. startAngle = endAngle;
  33. }
  34. }
  35. /**
  36. * 通过setInterval画圆
  37. */
  38. function myLoop(startAngle, endAngle, ctx, angleStep, ox, oy, radius, color) {
  39. var endTemp = startAngle; //画扇形时的动态增长的角度
  40. var timer = setInterval(function() {
  41. if (endTemp >= endAngle) {
  42. clearInterval(timer);
  43. return;
  44. }
  45. ctx.fillStyle = color;
  46. endTemp += angleStep; //使临时结束弧度递增
  47. ctx.beginPath();
  48. ctx.moveTo(ox, oy); //曲线起点设置为圆心
  49. ctx.arc(ox, oy, radius, startAngle, endTemp, false);
  50. ctx.closePath();
  51. ctx.fill();
  52. }, 1);
  53. }
  54. /**
  55. * 入口初始方法
  56. */
  57. function init() {
  58. //扇形比例数据和颜色
  59. var data_arr = [0.3, 0.4, 0.2, 0.1];
  60. var color_arr = ["#FF7F00", "#00FFFF", "#FFFF00", "#996633"];
  61. drawCircle(data_arr, color_arr);
  62. }
  63. window.onload = init;
  64. </script>
  65. </head>
  66. <body>
  67. <h3>canvas绘制饼图</h3>
  68. <p>
  69. <canvas id="canvas_circle" width="500px" height="300px" style="border:2px solid #FF7F00">
  70. 您的浏览器不支持canvas
  71. </canvas>
  72. </p>
  73. </body>
  74. </html>
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注