【发布时间】:2015-11-05 18:39:51
【问题描述】:
我在使用 javascript 在空 svg 中动态生成路径元素时遇到问题。我对使用第三方库不感兴趣,我想了解它在 vanilla javascript 中的工作原理。对于下面的codepen,为了简单起见,我使用 jQuery。
这里是那些对访问 codepen 链接不感兴趣的人的 javascript:
$(function() {
function calculateX(degrees, radius) {
var radians = Math.PI * degrees / 180;
return Math.ceil(radius + (radius * Math.cos(radians)));
}
function calculateY(degrees, radius) {
var radians = Math.PI * degrees / 180;
return Math.ceil(radius + (radius * Math.sin(radians)));
}
var d, opacity, len = 6,
path, endAngle, degrees = 360 / len,
startAngle = 270;
for (var i = 0; i < len; i++) {
opacity = 'rgba(255,0,0,' +parseFloat((i / len).toPrecision(2)) + ')';
endAngle = (startAngle + degrees) % 360;
d = 'M100 100 L' + calculateX(startAngle, 100) + ' ' +
calculateY(startAngle, 100) + ' A100 100 0 0 1 ' +
calculateX(endAngle, 100) + ' ' +
calculateY(endAngle, 100) + ' Z';
path = $('<path>').appendTo('svg');
path.css({'background': opacity, 'fill': opacity});
path[0].setAttribute('d', d);
startAngle = endAngle;
}
});
如果我将开发者控制台生成的 html 剪切并粘贴到 codepen 的 html 部分,结果正是我想要的,所以我认为我的 d 属性生成正确,似乎 DOM 不是正确更新或需要某种信号来重绘 svg?
这是生成的 html 片段:
<svg viewBox="0 0 200 200"><path d="M100 100 L100 0 A100 100 0 0 1 187 50 Z" style="fill: rgba(255, 0, 0, 0); background: rgba(255, 0, 0, 0);"></path><path d="M100 100 L187 50 A100 100 0 0 1 187 150 Z" style="fill: rgba(255, 0, 0, 0.168627); background: rgba(255, 0, 0, 0.168627);"></path><path d="M100 100 L187 150 A100 100 0 0 1 100 200 Z" style="fill: rgba(255, 0, 0, 0.329412); background: rgba(255, 0, 0, 0.329412);"></path><path d="M100 100 L100 200 A100 100 0 0 1 14 150 Z" style="fill: rgba(255, 0, 0, 0.498039); background: rgba(255, 0, 0, 0.498039);"></path><path d="M100 100 L14 150 A100 100 0 0 1 14 50 Z" style="fill: rgba(255, 0, 0, 0.670588); background: rgba(255, 0, 0, 0.670588);"></path><path d="M100 100 L14 50 A100 100 0 0 1 100 0 Z" style="fill: rgba(255, 0, 0, 0.831373); background: rgba(255, 0, 0, 0.831373);"></path></svg>
【问题讨论】:
标签: javascript html svg