主要的实现步骤:
1、绘制圆环
2、绘制进度环
3、绘制文字
直接上代码:
function drawRound(param) {
if (!param.temp) {
param.temp = {
currentValue: 0
};
}
var canvas = param.canvas;
if (!param.position_x) {
param.position_x = canvas.width / 2;
}
if (!param.position_y) {
param.position_y = canvas.height / 2;
}
var ctx = canvas.getContext('2d');
ctx.clearRect(0, 0, canvas.width, canvas.height);
//console.log(ctx);
//画出底层圆形
ctx.beginPath();
ctx.arc(param.position_x, param.position_y, param.radius, 0, 2 * Math.PI, false);
ctx.lineWidth = param.lineWidth;
ctx.strokeStyle = param.unactiveColor;
ctx.stroke();
//画出进度
var startAngle = 3 / 2 * Math.PI; //开始位置弧度,这样做是,默认从3点钟方向开始
var diffAngle = (param.temp.currentValue / 10) * Math.PI * 2; //结束角的弧度值(完成进度弧度值),前面那个除法就是在这个100*的圆形中占比多少
ctx.beginPath();
ctx.arc(param.position_x, param.position_y, param.radius, startAngle, startAngle + diffAngle,
false); //起始弧度+结束弧度就是要画上去的
ctx.strokeStyle = param.activeColor;
ctx.stroke();
//画出数值
ctx.fillStyle = param.textColor;
ctx.textAlign = 'center';
ctx.font = param.textSize + 'px ' + (param.font_family ? param.font_family : "serif");
ctx.fillText(param.text, param.position_x, param.position_y + (param.textSize / 2));
//动画
param.temp.currentValue = param.temp.currentValue + 0.1;
if (param.temp.currentValue > param.val) {
param.temp.currentValue = param.val;
} else {
window.requestAnimationFrame(function() {
drawRound(param);
});
}
}参数:
var param = {
canvas: c,//canvas对象,需要是JavaScript对象,不能是JQuery对象
//position_x: 20,//位置x,不填写的话默认是正中间
//position_y:20,//位置y,不填写的话默认是正中间
val: 3.5,//数值,最好是百分比,取值范围1-10
unactiveColor: "#9e9e9e",//进度环的底色,也就是未被覆盖到的
activeColor: "rgb(0,162,232)",//进度环填充后的颜色
lineWidth: 5,//进度环的厚度
radius:16,//半径
text: "35%",//中间显示的文本
textColor: "#666",//字体颜色
textSize: 10,//字体大小
font_family: "MicrosoftYaHei"//字体名称
};实现效果:


微信扫码查看本文
发表评论