画饼



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<canvas id="canvas" width="500", height="500">
您的浏览器不支持canvas,请升级最新的浏览器
</canvas>
</body>
<script>
let data = [
{value:0.2,color:'red',text:'小学生'},
{value:0.1,color:'yellow',text:'初中生'},
{value:0.3,color:'blue',text:'高中生'},
{value:0.4,color:'pink',text:'大学生'},
];

let canvas = document.querySelector('canvas');
let ctx = canvas.getContext('2d');

let start = 0; // 开始位置在0弧度
let end = 0;

for (let i=0;i<data.length;i++){
/*
* 文字的弧度:所属扇形的开始+本身弧度的一半
* let textRadius = start + (end-start)/2
* // x = 圆心 + 半径/2 *Math.cos(文字的弧度)
* let x = 250 + 200 * Math.cos(textRadius);
* // x = 圆心 + 半径*Math.sin(文字的弧度)
* let y = 250 + 200 * Math.sin(textRadius);
*/
ctx.beginPath();
start = end; // 开始等于上一次结束的位置
end = start + Math.PI * 2 * data[i].value;

let textRadius = start + (end-start)/2;
let x = 250 + 100 * Math.cos(textRadius);
let y = 250 + 100 * Math.sin(textRadius);


ctx.moveTo(250, 250); // 移动原点到圆心位置
ctx.arc(250, 250, 200, start, end);
ctx.fillStyle = data[i].color;
ctx.fill();



ctx.font = '20px "微软雅黑"';
ctx.fillStyle = 'black';
ctx.textAlign = 'center';
ctx.canBaseline = 'top';
ctx.fillText(data[i].text, x, y);
ctx.closePath();
}
</script>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值