代码:
<style>
#canv { display: block; margin: 20px auto; background: linear-gradient(tan, lightblue); }
</style>
<canvas id="canv" width="200" height="200" style=""></canvas>
<script>
let ctx = canv.getContext('2d');
let deg = 0, raf;
let drawCircle = (deg) => {
ctx.clearRect(0,0,200,200);
drawText(Math.floor(deg * 100 / 360) + '%');
ctx.save();
ctx.strokeStyle = 'rgba(56,104,32,.8)';
ctx.lineWidth = 8;
ctx.lineCap = 'round';
ctx.beginPath();
ctx.arc(100, 100, 90, 0, deg * Math.PI/180);
ctx.stroke();
ctx.restore();
};
let drawText = (text) => {
ctx.save();
ctx.strokeStyle = 'green';
ctx.font = 'normal 35px sans-serif';
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.strokeText(text,100,100);
ctx.restore();
};
let render = () => {
drawCircle(deg);
deg += 0.5;
raf = requestAnimationFrame(render);
if(deg > 360) raf = cancelAnimationFrame(raf);
};
render();
canv.onclick = () => {
console.log(raf, deg);
if(raf) return;
deg = 0;
render();
};
</script>
|