前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信小程序手写饼状图,非wx-echarts库,简洁易懂,不占代码体积!!!

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

作者头像
江咏之
发布2022-06-16 11:39:13
7600
发布2022-06-16 11:39:13
举报
文章被收录于专栏:技术社区

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

在这里插入图片描述
在这里插入图片描述

布局

代码语言:javascript
复制
<view class="left">
	<cover-view class="white"></cover-view>
	<canvas style="width: 136px; height: 136px;" canvas-id="Canvas"></canvas>
</view>

样式

代码语言:javascript
复制
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%);
}

实现效果

代码语言:javascript
复制
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()
	},
 
})
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档