微学习 Canvas [环形图]

View代码

<template>
	<view>
			<canvas class="arcCanvas"  canvas-id="firstCanvas" id="firstCanvas"></canvas>
	</view>
</template>

CSS代码

.arcCanvas{
		width: 100%;
		height: 400rpx;
}

Script代码

export default {
	
	props:{
		
		colorsList:{
			type:Array,
			default: function () {
				return ["#3E6FEF","#1EB292","#FF983B","#FF440E"]
			}
		},
		dataList:{
			type:Array,
			default: function () {
				return [10.5,20.3,30.7,40.9,20]
			}
		},
		nameList:{
			type:Array,
			default: function () {
				return ["营销一部","营销二部","营销三部","营销四部"]
			}
		},
		defaultColor:{
			type:String,
			default: function () {
				return "#C4C4C4"
			}
		},
		defaultinterval:{
			type:Number,
			default:function () {
				return 20
			}
		}
	},
	data(){
		return{
			windths:0,
			heights:0,
		}
	},
	mounted() {
		const query = uni.createSelectorQuery().in(this);
		query.select('#firstCanvas').boundingClientRect(data => {
		  console.log("得到布局位置信息" + JSON.stringify(data));
		  console.log("节点高度的距离为" + data.height);
			this.heights = data.height;
		}).exec();
		//屏幕宽度
		let windths = uni.getSystemInfoSync().windowWidth
		//开启画布
		var context = uni.createCanvasContext('firstCanvas')
		
		
		
		for (var i = 1; i <= this.dataList.length; i++) {
			//新建一根线条
			context.beginPath()
			//设置线条宽度
			context.setLineWidth(10)
			//设置线条颜色
			context.setStrokeStyle(this.defaultColor)
			/**
			 * 横向点
			 * 竖向点
			 * 圆弧半径
			 * 开始角度
			 * 结束角度
			 */
			context.arc( (windths / 3) , (this.heights * 0.5) , (this.defaultinterval * i) , 0 ,  Math.PI * 2 )
			//开始画
			context.stroke()
			 
			context.beginPath()
		 
			context.setStrokeStyle(this.colorsList[i % this.colorsList.length ])
			
			context.arc( (windths / 3) , (this.heights * 0.5) , (this.defaultinterval * i) , Math.PI *1.5 , ((Math.PI * 2 / 100) * this.dataList[i - 1] + (Math.PI*1.5)) )
			
			context.stroke();
			
			context.beginPath()
			context.arc((windths / 5)*3.35, i * 20 + 45 , 3 , 0 ,  Math.PI * 2 )
			context.fillStyle=this.colorsList[i % this.colorsList.length ];
			context.fill();
			context.stroke();
			
			context.beginPath()
			// 文字样式
			context.font = '14px 微软雅黑'
			//开始写文字
			context.fillText(this.nameList[i-1] +":" + this.dataList[i - 1]+"%" , (windths / 5)*3.5, i * 20 + 50);
		}
		
		
		  
		
		
		
		//将图形画再幕布上
		context.draw()
	}
}

效果展示

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值