小程序----使用图表显示数据--canvas

需求:在小程序上实现数据可视化

思路:本来想用的是echarts或者相关的可视化插件,但因为用的是vue3,大多数插件不支持,所以用了echarts,但最后打包的时候说包太大超过2M无法上传,百度了一下,说包太大可以进行分包,但是分包的时候还有很多条件,例如tabbar必须在主包,而且最重要的是主包还不能使用分包的资源,那这样的话,如果把echarts这个页面封装的页面放到分包里面,那我主包就没法引用这个图表页面显示了,所以分包是不现实的(然而这一点是在我分完包之后才知道的,所以这告诉我们,无论使用什么新东西都要认真阅读文档,读明白所有使用条件,再决定是否可以使用),分包实现不了,最后只能放弃echarts,转向用canvas绘图,其实最开始也是考虑过使用canvas的,但是因为canvas刚自己看了文档不久,不太熟练,而且也没太想好,所以才用echarts的,但最后还是回到了canvas上。

效果图:

实现过程:其实就是利用canvas 2d来画圆,具体属性大家可以到这个网站查看HTML5 Canvas | 菜鸟教程

但是有一点要注意的是,canvas原生属性画图优先级是最高的,且不受z-index等优先级属性控制,所以可能会有一些优先级问题,所以最后我把canvas绘出来的图形转成了图片显示在页面上,这样就没有了优先级的问题。

实现代码:

复制代码
 <canvas v-if="!imgsrc" id="canvas" canvas-id="canvas" style="width: 384px; height: 150px;" ></canvas>
  <image v-if="imgsrc" :src="imgsrc" ></image>

	let that =this
			var ctx = uni.createCanvasContext('canvas', this);
			let end = (this.data.done / this.data.total ) * 2 * Math.PI; //设置弧度
			ctx.setLineWidth(12); // 设置圆环的宽度
			ctx.arc(100, 80, 60, 0, 2 * Math.PI)
			ctx.setStrokeStyle('#ececec');
			ctx.stroke(); //对当前路径进行描边
			// ctx.setLineCap('square'); // 设置圆环端点的形状  无圆角
			ctx.beginPath(); //开始一个新的路径
			ctx.setStrokeStyle('#6db500'); // 设置圆环的颜色
			ctx.setLineCap('round'); // 设置圆环端点的形状  圆角
			ctx.arc(100, 80, 60, 0, end, false);
			ctx.stroke(); //对当前路径进行描边
			//设置一个原点(110,110),半径为100的圆的路径到当前路径
			ctx.stroke(); //对当前路径进行描边
			ctx.draw(false,()=>{
				// 生成图片
				wx.canvasToTempFilePath({
				  height: 150,
				  canvasId: 'canvas',
				  success: (res) => {
					  that.imgsrc = res.tempFilePath
				  },
				  fail: (res) => {
				    console.log(res);
				  }
				},that);
			});
相关推荐
说私域4 小时前
定制开发AI智能名片S2B2C预约服务小程序的定制开发与优势分析
大数据·人工智能·小程序
云起SAAS13 小时前
名字姓名起名打分评分抖音快手微信小程序看广告流量主开源
微信小程序·小程序·ai编程·看广告变现轻·名字姓名起名打分评分
说私域13 小时前
从裂变能力竞争到技术水平竞争:开源AI智能名片链动2+1模式S2B2C商城小程序对微商企业竞争格局的重塑
人工智能·小程序·开源
开发加微信:hedian11616 小时前
短剧小程序开发全攻略:技术选型与实现思路
微信·小程序·架构·aigc·交互
2501_9159184116 小时前
移动端 HTTPS 抓包实战,多工具组合分析与高效排查指南
数据库·网络协议·ios·小程序·https·uni-app·iphone
星光一影1 天前
陪诊陪检系统源码,陪诊小程序,陪诊APP,陪诊服务,家政上门系统,居家护理陪护源码
mysql·小程序·uni-app·php
阿奇__1 天前
uniapp h5 app 小程序获取当前定位
小程序·uni-app
2501_915106321 天前
iOS性能调优的系统化实践,从架构分层到多工具协同的全流程优化指南(开发者深度版)
android·ios·小程序·架构·uni-app·iphone·webview
一 乐1 天前
游戏助手|游戏攻略|基于SprinBoot+vue的游戏攻略系统小程序(源码+数据库+文档)
数据库·vue.js·spring boot·后端·游戏·小程序
说私域2 天前
开源AI智能名片链动2+1模式S2B2C商城小程序:分享经济时代的技术赋能与模式创新
人工智能·小程序·开源