实现效果如图
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Canvas 实现圆形进度条并显示数字百分比</title>
<style>
</style>
</head>
<body>
<canvas id="va" width="400" height="400" style="background:#000;"></canvas>
<input type="range" min="0" max="100" value="0" id="range">
<script>
var cvs = document.getElementById('va');
var ctx = cvs.getContext('2d');
ctxX = cvs.width / 2;
ctxY = cvs.height / 2;
rad = Math.PI * 2 / 100;
speed = 0;
function wCircle(n) {
ctx.save();
ctx.strokeStyle = "orangered";
ctx.lineWidth = 5;
ctx.beginPath();
ctx.arc(ctxX, ctxY, 100, -Math.PI / 2, -Math.PI / 2 + n * rad, false);
ctx.stroke();
ctx.closePath();
ctx.restore();
}
function dCircle() {
ctx.save();
ctx.strokeStyle = "#fff";
ctx.lineWidth = 2;
ctx.beginPath();
ctx.arc(ctxX, ctxY, 100, 0, Math.PI * 2, false);
ctx.stroke();
ctx.closePath();
ctx.restore();
}
function text(n) {
ctx.save();
ctx.font = "40px Arial";
ctx.fillStyle = "orangered";
ctx.fillText(n + "%", ctxX - 35, ctxY + 10);
ctx.restore();
}
var range = document.getElementById('range');
(function draw() {
window.requestAnimationFrame(draw);
ctx.clearRect(0, 0, cvs.width, cvs.height);
dCircle();
text(speed);
wCircle(speed);
range.oninput = function () {
speed = range.value;
console.log(speed);
window.requestAnimationFrame(draw);
ctx.clearRect(0, 0, cvs.width, cvs.height);
dCircle();
text(speed);
wCircle(speed);
}
})();
</script>
</body>
</html>