微信小程序手写饼状图,非wx-echarts库,简洁易懂,不占代码体积!!!

简介: 微信小程序手写饼状图,非wx-echarts库,简洁易懂,不占代码体积!!!

写在前面:小程序也有echarts组件库,但是我觉得太占代码量了,本来小程序的体积只有2m。在下载个组件库。那就没多少了。索性就手写一个。

实现效果:

image.png

布局

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

样式

page {
  width: 100%;
  height: 100%;
}
.left {
  width: 300rpx;
  height: 300rpx;
  display: flex;
  justify-content: center;
  align-items: center;
  position: relative;
}
.white {
  width: 136rpx;
  height: 136rpx;
  border-radius: 50%;
  position: absolute;
  top: 50%;
  left: 50%;
  z-index: 10;
  background-color: #fff;
  transform: translate(-50%, -50%);
}

实现效果

Page({
  /**
   * 页面的初始数据
   */
  data: {
    messarr: [{
        color: '#464af8',
        num: '20',
        flownum: '20',
      },
      {
        color: '#ff6262',
        num: '50',
        flownum: '50',
      },
      {
        color: '#f7c11b',
        num: '60',
        flownum: '60',
      },
      {
        color: '#ff8015',
        num: '80',
        flownum: '80',
      },
      {
        color: '#17d0bc',
        num: '20',
        flownum: '20',
      }
    ]
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function() {
      // 初始化
    const ctx = wx.createCanvasContext('Canvas');
    // 设置圆点 x  y   中心点
    let number = {
      x: 68,
      y: 68
    };
    // 获取数据 各类项的个数
    let term = this.data.messarr;
    let termarr = [];
    for (let t = 0; t < term.length; t++) {
      // flownum
      let thisterm = Number(term[t].flownum)
      let thiscolor = term[t].color
      termarr.push({
        data: thisterm,
        color: thiscolor
      })
    }
    console.log(termarr)
    // 设置总数
    let sign = 0;
    for (var s = 0; s < termarr.length; s++) {
      sign += termarr[s].data
    }
    //设置半径 
    let radius = 60;
    for (var i = 0; i < termarr.length; i++) {
      var start = 0;
      // 开始绘制
      ctx.beginPath()
      if (i > 0) {
        for (var j = 0; j < i; j++) {
          start += termarr[j].data / sign * 2 * Math.PI
        }
      }
      var end = start + termarr[i].data / sign * 2 * Math.PI
      ctx.arc(number.x, number.y, radius, start, end);
      ctx.setLineWidth(1);
      ctx.lineTo(number.x, number.y);
      ctx.setStrokeStyle('#fff');
      ctx.setFillStyle(termarr[i].color);
      ctx.fill();
      ctx.closePath();
      ctx.stroke();
    }
    ctx.draw()
  },
})


目录
相关文章
|
1月前
|
小程序 前端开发 JavaScript
微信小程序图表制作利器:ECharts组件的使用与技巧
微信小程序图表制作利器:ECharts组件的使用与技巧
52 1
|
3月前
|
小程序 JavaScript
微信小程序使用echarts图表(ec-canvas)
这篇文章介绍了在微信小程序中使用`ec-canvas`集成echarts图表的方法,包括解决加载时报错的问题、配置图表组件、以及在小程序页面中引入和使用这些图表组件的步骤。
463 1
微信小程序使用echarts图表(ec-canvas)
|
2月前
|
小程序 JavaScript Go
代码总有一个是你想要的分享63个微信小程序源
分享63个微信小程序源代码,包括电商系统、同城拼车、博客等多种应用,涵盖C#、Node.js、Golang等技术栈。每个项目附带源码和示例,适合初学者和开发者参考学习。提取码:8888,代码效果参考:http://www.603393.com/sitemap.xml。
64 2
|
3月前
|
小程序 前端开发 JavaScript
微信小程序实现微信支付(代码和注释很详细)
微信小程序实现微信支付(代码和注释很详细)
|
3月前
|
小程序 JavaScript 前端开发
微信小程序开发必备前置知识:基本代码构成与语法
【8月更文挑战第8天】微信小程序的基本代码构成与语法
102 0
微信小程序开发必备前置知识:基本代码构成与语法
|
3月前
|
小程序 JavaScript 安全
微信小程序实现云闪付支付(代码和注释很详细)
微信小程序实现云闪付支付(代码和注释很详细)
|
4月前
|
小程序 前端开发
【微信小程序-原生开发】实用教程22 - 绘制图表(引入 echarts,含图表的懒加载-获取到数据后再渲染图表,多图表加载等技巧)
【微信小程序-原生开发】实用教程22 - 绘制图表(引入 echarts,含图表的懒加载-获取到数据后再渲染图表,多图表加载等技巧)
246 0
|
4月前
|
小程序 前端开发
【微信小程序-原生开发】添加自定义图标(以使用阿里图标库为例)
【微信小程序-原生开发】添加自定义图标(以使用阿里图标库为例)
201 0
|
6月前
|
JavaScript Java 测试技术
基于小程序的健身管理系统及会员微信小程序+springboot+vue.js附带文章和源代码说明文档ppt
基于小程序的健身管理系统及会员微信小程序+springboot+vue.js附带文章和源代码说明文档ppt
51 2
|
6月前
|
JavaScript Java 测试技术
学习资料库小程序设计ssm+vue.js附带文章和源代码设计说明文档ppt
学习资料库小程序设计ssm+vue.js附带文章和源代码设计说明文档ppt
40 1