Это руководство предназначено для создания закрашенных круглых индикаторов выполнения с помощью тега Canvas, как показано ниже:
Прежде чем переходить к коду, нам нужно понять, как нарисовать круг с помощью тега Canvas.
Для тега Canvas круг представлен следующим образом:
Итак, имея это в виду, чтобы нарисовать круг с помощью тега Canvas, мы можем использовать следующий код:
HTML
<canvas width="150" height="150" id="canvas" />
JS
let canvas = document.getElementById("canvas"); let context = canvas.getContext("2d"); let centerX = canvas.width / 2; let centerY = canvas.height / 2; let radius = 70; /* draw the circle */ /* begin the path */ context.beginPath(); /* move to the center of the circle */ context.moveTo(centerX, centerY); /* draw arc from 0 to 2 * Math.PI which is equivalent to 360 deg */ context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false); /* close the path */ context.closePath(); /* fill it with grey color */ context.fillStyle = "#ddd"; context.fill(); /* give a border to the circle */ context.strokeStyle = "rgba(200, 208, 218, 0.66)"; context.stroke();
Приведенный выше код рисует серый кружок. Теперь, чтобы показать зеленый кружок прогресса на основе процента прогресса, мы должны написать следующий код:
/* startAngle is from 0 deg which is 1.5 * Math.PI (refer to the diagram above) */ let startAngle = 1.5 * Math.PI; /* calculate the value of one unit on the circle */ let unitValue = (Math.PI - 0.5 * Math.PI) / 25; /* find the end angle based on the start angle */ if (percent >= 0 && percent <= 25) { endAngle = startAngle + (percent * unitValue); } else if (percent > 25 && percent <= 50) { endAngle = startAngle + (percent * unitValue); } else if (percent > 50 && percent <= 75) { endAngle = startAngle + (percent * unitValue); } else if (percent > 75 && percent <= 100) { endAngle = startAngle + (percent * unitValue); } /* draw the green circle */ context.beginPath(); context.moveTo(centerX, centerY); context.arc(centerX, centerY, radius, startAngle, endAngle, false); context.closePath(); context.fillStyle = "#2cb191"; context.fill();
Это рисует зеленый кружок прогресса.
Полный код показан ниже:
function drawProgressCircle (percent) { let canvas = document.getElementById("canvas"); let context = canvas.getContext("2d"); let centerX = canvas.width / 2; let centerY = canvas.height / 2; let radius = 70; /* draw the grey circle */ context.beginPath(); context.moveTo(centerX, centerY); context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false); context.closePath(); context.fillStyle = "#ddd"; context.fill(); context.strokeStyle = "rgba(200, 208, 218, 0.66)"; context.stroke(); /* draw the green circle based on percentage */ let startAngle = 1.5 * Math.PI; let unitValue = (Math.PI - 0.5 * Math.PI) / 25; if (percent >= 0 && percent <= 25) { endAngle = startAngle + (percent * unitValue); } else if (percent > 25 && percent <= 50) { endAngle = startAngle + (percent * unitValue); } else if (percent > 50 && percent <= 75) { endAngle = startAngle + (percent * unitValue); } else if (percent > 75 && percent <= 100) { endAngle = startAngle + (percent * unitValue); } context.beginPath(); context.moveTo(centerX, centerY); context.arc(centerX, centerY, radius, startAngle, endAngle, false); context.closePath(); context.fillStyle = "#2cb191"; context.fill(); } drawProgressCircle(80);