效果如如下:
源码如下,直接复制保存为 html 文件即可预览:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<canvas id="canvas" width="300" height="300">
<p>抱歉,您的浏览器不支持canvas</p>
</canvas>
<script>
/**
* 生成环形进度条
*/
function toCanvas(id, color, progress) {
//canvas进度条
var canvas = document.getElementById(id),
ctx = canvas.getContext("2d"),
percent = progress, //最终百分比
circleX = canvas.width / 2, //中心x坐标
circleY = canvas.height / 2, //中心y坐标
radius = 80, //圆环半径
cradius = 75, // canvas半径
lineWidth = 6, //圆形线条的宽度
fontSize = 20; //字体大小
//两端圆点
// function smallcircle1(cx, cy, r) {
// ctx.beginPath();
// //ctx.moveTo(cx + r, cy);
// ctx.lineWidth = 1;
// ctx.fillStyle = '#06a8f3';
// ctx.arc(cx, cy, r, 0, Math.PI * 2);
// ctx.fill();
// }
// function smallcircle2(cx, cy, r) {
// ctx.beginPath();
// //ctx.moveTo(cx + r, cy);
// ctx.lineWidth = 1;
// ctx.fillStyle = '#fff';
// ctx.arc(cx, cy, r, 0, Math.PI * 2);
// ctx.fill();
// }
//画圆
function circle(cx, cy, r, sAngle, eAngle, bColor = '#eee') {
ctx.beginPath();
//ctx.moveTo(cx + r, cy);
ctx.lineWidth = lineWidth;
ctx.strokeStyle = bColor;
// ctx.lineCap = 'round';
// ctx.arc(cx, cy, r, Math.PI * 1, Math.PI * 2);
ctx.arc(cx, cy, r, sAngle, eAngle);
ctx.stroke();
}
//画弧线
function sector(cx, cy, r, startAngle, endAngle, _lineWidth) {
ctx.beginPath();
//ctx.moveTo(cx, cy + r); // 从圆形底部开始画
ctx.lineWidth = _lineWidth;
// 渐变色 - 可自定义
// var linGrad = ctx.createLinearGradient(
// circleX-radius-lineWidth, circleY, circleX+radius+lineWidth, circleY
// );
// linGrad.addColorStop(0.0, '#06a8f3');
// //linGrad.addColorStop(0.5, '#9bc4eb');
// linGrad.addColorStop(1.0, '#00f8bb');
// ctx.strokeStyle = linGrad;
// 进度条颜色
ctx.strokeStyle = color;
//圆弧两端的样式
// ctx.lineCap = 'round';
//圆弧
ctx.arc(
cx, cy, r,
startAngle,
(Math.PI * (1.5 - ((1.5 / 100) * process))),
true
);
ctx.stroke();
}
//刷新
function loading() {
if (process >= percent) {
clearInterval(circleLoading);
}
//清除canvas内容
ctx.clearRect(0, 0, circleX * 2, circleY * 2);
//中间的字
ctx.font = fontSize + 'px April';
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.fillStyle = '#999';
ctx.fillText(parseFloat(process).toFixed(0) + '%', circleX, circleY - 10);
ctx.font = (fontSize - 4) + 'px April';
ctx.fillStyle = '##a7a7a7';
ctx.fillText('安全', circleX, circleY + 20);
circle(circleX, circleY, radius + 14, 0, Math.PI * 2, '#e1f7f3');
//圆形
circle(circleX, circleY, radius, 0, Math.PI * 1.5, '#6bd8b3');
//圆弧
sector(circleX, circleY, radius-8, Math.PI * 1.5, 0, lineWidth * 2);
//两端圆点
// smallcircle1(cradius + Math.cos(2 * Math.PI / 360 * 120) * radius, cradius + Math.sin(2 * Math.PI / 360 * 120) *
// radius, 0);
// smallcircle2(cradius + Math.cos(2 * Math.PI / 360 * (120 + process * 3)) * radius, cradius + Math.sin(2 * Math.PI /
// 360 * (120 + process * 3)) * radius, 2);
//控制结束时动画的速度
if (process / percent > 0.90) {
process += 0.30;
} else if (process / percent > 0.80) {
process += 0.55;
} else if (process / percent > 0.70) {
process += 0.75;
} else {
process += 1.0;
}
}
var process = 0.0; //进度
var circleLoading = window.setInterval(function() {
loading();
console.log(11)
}, 20);
// loading();
}
toCanvas('canvas','#6bd8b3', 32);
</script>
</body>
</html>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。