【发布时间】:2017-06-09 19:29:27
【问题描述】:
我有一个画布,里面有一个弧线和一些标签。
这是小提琴链接 - 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 度。 我试过这段代码,但没有用:
ctx.translate(x, y);
ctx.rotate(135 * Math.PI/180);
ctx.translate(-x, -y);
其中 x 和 y 是画布中心点。 任何帮助,将不胜感激。 PS:我是画布新手!
【问题讨论】:
标签: javascript css html canvas