圆形进度条是一种常见的UI组件,用于显示任务的完成进度。它通常以圆形的样式展示,通过填充颜色的变化来表示进度的百分比。
以下是一个使用JavaScript和HTML5 Canvas制作圆形进度条的示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>圆形进度条</title>
<style>
canvas {
display: block;
margin: 50px auto;
background: #f0f0f0;
}
</style>
</head>
<body>
<canvas id="progressCanvas" width="200" height="200"></canvas>
<script>
const canvas = document.getElementById('progressCanvas');
const ctx = canvas.getContext('2d');
const radius = canvas.height / 2;
ctx.translate(radius, radius);
const radiusInner = radius * 0.8;
let progress = 0;
function drawProgress() {
ctx.clearRect(-radius, -radius, canvas.width, canvas.height);
drawCircle(0, 0, radius, '#ddd');
drawCircle(0, 0, radiusInner, '#eee');
drawProgressArc(progress);
}
function drawCircle(x, y, r, color) {
ctx.beginPath();
ctx.arc(x, y, r, 0, 2 * Math.PI);
ctx.fillStyle = color;
ctx.fill();
}
function drawProgressArc(progress) {
ctx.beginPath();
ctx.arc(0, 0, radiusInner, -Math.PI / 2, (progress * 2 * Math.PI) - Math.PI / 2);
ctx.strokeStyle = '#007bff';
ctx.lineWidth = radius * 0.2;
ctx.stroke();
}
function updateProgress(value) {
progress = value;
drawProgress();
}
// 模拟进度更新
let interval = setInterval(() => {
if (progress < 100) {
updateProgress(progress + 1);
} else {
clearInterval(interval);
}
}, 50);
</script>
</body>
</html>
requestAnimationFrame
代替setInterval
进行动画优化。通过以上示例和解决方案,你应该能够成功创建并优化一个圆形进度条。
领取专属 10元无门槛券
手把手带您无忧上云