【发布时间】:2015-02-08 16:24:50
【问题描述】:
我们正在渲染 64 个饼图,并希望每个饼图的中间有一个完美的线性渐变。
如果我将 SVG 复制到 illustrator,现在看起来像这样,因为您可以看到渐变在蓝色突出显示的图片中没有完全对齐:
我们需要的是更精确地计算像这样的部分。
这是我们目前使用的代码。我们需要的是计算梯度角度,使梯度更对齐中心
var total=64
, center_x=options.center_x
, center_y=options.center_y
, radie=options.radie
, val = 360 / total;
for (var i=0; total>=i; i++) {
var start=val*i
, gradientAngle=val*(total-i)
, angle = (start + val % 360) * Math.PI / 180;
renderPiePiece(center_x, center_y, radie, start, start+val, gradientAngle);
}
function renderPiePiece(center_x, center_y, radie, start_angle, end_angle, gradientAngle) {
var flag = (end_angle - start_angle) > 180;
start_angle = (start_angle % 360) * Math.PI / 180;
end_angle = (end_angle % 360) * Math.PI / 180;
this.paper
.path(
["M", center_x, center_y,
"l", radie * Math.cos(start_angle), radie * Math.sin(start_angle),
"A", radie, radie, 0, +flag, 1, center_x + radie * Math.cos(end_angle), center_y + radie * Math.sin(end_angle),
"z"]
).attr({
stroke:'black',
"stroke-width":1,
fill:gradientAngle+'-#fff:0-#000'
});
}
这是另一个示例,它现在的样子。如您所见,渐变不是从中心完美的。
这里是脚本的链接: http://jsbin.com/bakinikadi/1/edit?html,css,js,output
【问题讨论】:
标签: javascript svg raphael