0
この質問は、Define a circle/arc animation in SVGとHow to calculate the SVG Path for an arc (of a circle)の拡張です。次のようにSVG:塗りつぶし弧アニメーション?
Iは@opsbの答えを変更した:
function calculateArcPath(x, y, radius, spread, startAngle, endAngle){
var innerStart = polarToCartesian(x, y, radius, endAngle);
\t var innerEnd = polarToCartesian(x, y, radius, startAngle);
var outerStart = polarToCartesian(x, y, radius + spread, endAngle);
var outerEnd = polarToCartesian(x, y, radius + spread, startAngle);
var largeArcFlag = endAngle - startAngle <= 180 ? "0" : "1";
\t \t
var d = [
"M", outerStart.x, outerStart.y,
"A", radius + spread, radius + spread, 0, largeArcFlag, 0, outerEnd.x, outerEnd.y,
"L", innerEnd.x, innerEnd.y,
"A", radius, radius, 0, largeArcFlag, 1, innerStart.x, innerStart.y,
"L", outerStart.x, outerStart.y, "Z"
].join(" ");
return d;
}
function polarToCartesian(centerX, centerY, radius, angleInDegrees) {
var angleInRadians = (angleInDegrees-90) * Math.PI/180.0;
return {
x: centerX + (radius * Math.cos(angleInRadians)),
y: centerY + (radius * Math.sin(angleInRadians))
};
}
var startPath = calculateArcPath(250, 250, 50, 30, 0, 30)
var endPath = calculateArcPath(250, 250, 50, 30, 0, 150)
d3.select("path").attr("d", startPath)
d3.select("path").transition().duration(2000).attr("d", endPath)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<svg width="500" height="500" style="border:1px gray solid">
<path id="path" fill="blue" stroke="black"></path>
</svg>
しかし、パスは円の周りのスムーズな移行をイマイチ。
もともと私は実際にあなたが弧を作るために太いストロークを使用する場合は、その後、あなたは何の塗りつぶしを持っていないか、できないのいずれか....ことをやっていましたアウトラインを作成します(同じSVG要素を使用して、別のアウトラインを作成することもできます)。太いストローク幅で作られていない円弧セグメントの使用は問題の要点であり、それがS.O.にあることを正当化するものである。ストローク・ダッシュオフセットのトリックについて既にいくつかあることを考えると – SumNeuron