<..._小程序饼状图">
当前位置:   article > 正文

小程序 绘制饼状图_小程序饼状图

小程序饼状图

写在前:按照比例绘制饼状图


实现效果: 

 布局

  1. <view class="left">
  2. <cover-view class="white"></cover-view>
  3. <canvas style="width: 136px; height: 136px;" canvas-id="Canvas"></canvas>
  4. </view>

 样式

  1. page {
  2. width: 100%;
  3. height: 100%;
  4. }
  5. .left {
  6. width: 300rpx;
  7. height: 300rpx;
  8. display: flex;
  9. justify-content: center;
  10. align-items: center;
  11. position: relative;
  12. }
  13. .white {
  14. width: 136rpx;
  15. height: 136rpx;
  16. border-radius: 50%;
  17. position: absolute;
  18. top: 50%;
  19. left: 50%;
  20. z-index: 10;
  21. background-color: #fff;
  22. transform: translate(-50%, -50%);
  23. }

实现效果

  1. Page({
  2. /**
  3. * 页面的初始数据
  4. */
  5. data: {
  6. messarr: [{
  7. color: '#464af8',
  8. num: '20',
  9. flownum: '20',
  10. },
  11. {
  12. color: '#ff6262',
  13. num: '50',
  14. flownum: '50',
  15. },
  16. {
  17. color: '#f7c11b',
  18. num: '60',
  19. flownum: '60',
  20. },
  21. {
  22. color: '#ff8015',
  23. num: '80',
  24. flownum: '80',
  25. },
  26. {
  27. color: '#17d0bc',
  28. num: '20',
  29. flownum: '20',
  30. }
  31. ]
  32. },
  33. /**
  34. * 生命周期函数--监听页面加载
  35. */
  36. onLoad: function(options) {
  37. },
  38. /**
  39. * 生命周期函数--监听页面初次渲染完成
  40. */
  41. onReady: function() {
  42. // 初始化
  43. const ctx = wx.createCanvasContext('Canvas');
  44. // 设置圆点 x y 中心点
  45. let number = {
  46. x: 68,
  47. y: 68
  48. };
  49. // 获取数据 各类项的个数
  50. let term = this.data.messarr;
  51. let termarr = [];
  52. for (let t = 0; t < term.length; t++) {
  53. // flownum
  54. let thisterm = Number(term[t].flownum)
  55. let thiscolor = term[t].color
  56. termarr.push({
  57. data: thisterm,
  58. color: thiscolor
  59. })
  60. }
  61. console.log(termarr)
  62. // 设置总数
  63. let sign = 0;
  64. for (var s = 0; s < termarr.length; s++) {
  65. sign += termarr[s].data
  66. }
  67. //设置半径
  68. let radius = 60;
  69. for (var i = 0; i < termarr.length; i++) {
  70. var start = 0;
  71. // 开始绘制
  72. ctx.beginPath()
  73. if (i > 0) {
  74. for (var j = 0; j < i; j++) {
  75. start += termarr[j].data / sign * 2 * Math.PI
  76. }
  77. }
  78. var end = start + termarr[i].data / sign * 2 * Math.PI
  79. ctx.arc(number.x, number.y, radius, start, end);
  80. ctx.setLineWidth(1);
  81. ctx.lineTo(number.x, number.y);
  82. ctx.setStrokeStyle('#fff');
  83. ctx.setFillStyle(termarr[i].color);
  84. ctx.fill();
  85. ctx.closePath();
  86. ctx.stroke();
  87. }
  88. ctx.draw()
  89. },
  90. })

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/526520
推荐阅读
相关标签
  

闽ICP备14008679号