-1
私は円弧とその中にいくつかのラベルが付いたキャンバスを持っています。キャンバス弧を中心に回転します。
はここでフィドルのリンクです - Fiddle、以下のコードです:
var canvas = document.getElementById("myCanvas"),
ctx = canvas.getContext("2d"),
x = canvas.width/2,
y = canvas.height/2,
radius = 100;
ctx.lineWidth = 2;
var numberofArcs = 10,
sengmentWidth = 1.5 * Math.PI/numberofArcs,
pieAngle = 1.5 * Math.PI/numberofArcs;
console.log(pieAngle);
var labeltext = '',
font = 16,
hightlight = 1;
drawSegments(radius, font, hightlight);
ctx.translate(x, y);
ctx.rotate(135 * Math.PI);
ctx.translate(-x, -y);
function drawSegments(radius, font, highlight) {
var offset = 0;
for (var i = 0; i < numberofArcs; i++) {
(i<=8) ? offset = 3 : offset = 8;
ctx.save();
ctx.beginPath();
ctx.moveTo(x, y);
ctx.arc(x, y, radius, i * pieAngle, (i + 1) * pieAngle);
var hueValue = i * 15;
ctx.fillStyle = 'hsl(' + hueValue + ',70%, 60%)';
ctx.fill();
ctx.lineTo(x, y);
ctx.lineWidth = 3;
ctx.strokeStyle = '#f3f5f6';
ctx.stroke();
ctx.beginPath();
ctx.moveTo(x, y);
ctx.arc(x, y, radius - 10, i * pieAngle, (i + 1) * pieAngle);
ctx.fillStyle = '#f3f5f6';
ctx.fill();
ctx.lineTo(x, y);
ctx.lineWidth = 0;
labeltext = i + 1;
ctx.font = '16px bold white';
var width = ctx.measureText(labeltext).width;
ctx.fillStyle = '#CCC';
if ((i + 1) == highlight) {
ctx.textBaseline = 'middle';
console.log(offset);
ctx.beginPath();
ctx.moveTo(x + offset +(radius + 30) * Math.cos(i * pieAngle + ((i + 1) * pieAngle - i * pieAngle)/2), y + (radius + 30) * Math.sin(i * pieAngle + ((i + 1) * pieAngle - i * pieAngle)/2));
ctx.arc(x + offset + (radius + 30) * Math.cos(i * pieAngle + ((i + 1) * pieAngle - i * pieAngle)/2), y + (radius + 30) * Math.sin(i * pieAngle + ((i + 1) * pieAngle - i * pieAngle)/2), 10, 0, 2 * Math.PI);
ctx.fillStyle = 'red';
ctx.fill();
ctx.fillStyle = "#000";
ctx.fillText(labeltext, x + (radius + 30) * Math.cos(i * pieAngle + ((i + 1) * pieAngle - i * pieAngle)/2), y + (radius + 30) * Math.sin(i * pieAngle + ((i + 1) * pieAngle - i * pieAngle)/2));
} else {
ctx.fillStyle = "black";
ctx.fillText(labeltext, x + (radius + 30) * Math.cos(i * pieAngle + ((i + 1) * pieAngle - i * pieAngle)/2), y + (radius + 30) * Math.sin(i * pieAngle + ((i + 1) * pieAngle - i * pieAngle)/2));
}
}
}
canvas {
border: 1px dotted black;
color: black;
}
<canvas id="myCanvas" width="400" height="400" style="border:1px solid #d3d3d3;">
Your browser does not support the HTML5 canvas tag.</canvas>
私は135度で、ラベルと一緒にアーク全体を回転さ達成したいです。 私はこのコードを試してみましたが、それはうまくいきませんでした:
xとyはキャンバスの中心点ですctx.translate(x, y);
ctx.rotate(135 * Math.PI/180);
ctx.translate(-x, -y);
。 ご協力いただければ幸いです。 PS:私はキャンバスを初めて使っています!