我有一個小應用程序,我需要爲arcs生成textPath標籤。我正在通過拉斐爾繪製弧線,這非常棒。然而Raphael不支持textPaths。我們可以通過jQuery將它們添加到svg元素中,但由於某種原因它們不會渲染。當我靜態地複製動態生成的代碼時,它呈現正常。使用jQuery修改Raphael SVG圖像
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="600" height="600">
<desc>Created with Raphaël</desc><defs></defs>
<a title="This is a test entry">
<path fill="none" stroke="#1e79a0" d="M395.2627944162883,355A110,110,0,0,1,199.5099996593139,344.74103073833805" style="stroke-width: 20px; " stroke-width="20" id="This_is_a_test_entry"></path>
</a>
<text>
<textpath xlink:href="#This_is_a_test_entry">This is a test entry</textpath>
</text>
</svg>
使用上面的代碼,您永遠不會看到弧的標籤。然而,當下面是硬編碼它呈現爲預期:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="600" height="600">
<a title="Bacon">
<path id="Arc" fill="none" stroke="#1e79a0" d="M395.2627944162883,355A110,110,0,0,1,201.13265490709162,348.2208261467985" style="stroke-width: 20;" stroke-width="20">
</path>
</a>
<text>
<textPath xlink:href="#Arc">This is an Arc</textPath>
</text>
</svg>
任何有識之士,爲什麼我沒有看到我的整個SVG將不勝感激。
編輯:
我已經修改了自己的JavaScript,我認爲這是幾乎沒有,但textPath仍然不會呈現。下面是當前的代碼,主要是由於費米:
function drawRange(start, end, R, range, id, title) {
var color = "hsb(".concat(Math.round(R)/200, ",", end/360, ", .75)");
var key_position = key[id];
var svg_bits = document.getElementsByTagName('svg')[0].childNodes;
var svgns = document.createElementNS('http://www.w3.org/2000/svg', "path");
var path;
range.attr({title: title});
range.animate({arc: [start, end, R]}, 900, ">");
//Add an id to the path element that was just drawn. This doesn't seem to help though.
for(var i = 0; i < svg_bits.length; i++) {
if (svg_bits[i].tagName == "a" && svg_bits[i].getAttribute('title') == title){
path = svg_bits[i].childNodes[0];
}
}
path.setAttribute('id', title);
//Add the name to the key, set the color and unhide the element.
$(key_position).html(range.attr("title"));
$(key_position).css('color', Raphael.getRGB(color).hex);
$(key_position).show();
};
function makeSVG(tag, attrs) {
var el = document.createElementNS('http://www.w3.org/2000/svg', tag);
for (var k in attrs)
el.setAttribute(k, attrs[k]);
return el;
};
function addLabel(label) {
var text = makeSVG("text", {});
var title = makeSVG("textPath", {"xlink:href":'#' + label.replace(/\s/g, '_')});
title.appendChild(document.createTextNode(label));
text.appendChild(title);
r.canvas.appendChild(text);
};
我得到爲0x0的邊框爲textPath但沒有textPath。
啊。不知怎的,沒有注意到。在這個例子中,你有'這是一個Arc ',在這個例子中你沒有'這個是一個測試條目 ' '。第二個元素名稱不同(全部小寫,而不是駱駝大小寫)。我假設SVG在這裏區分大小寫。 –
Femi
你最初是對的。我修復了我的帖子以反映實際的代碼,不確定錯誤來自哪裏。 我試過用單個單詞ID,它仍然不會呈現出於某種原因。唯一能夠真正識別爲不同的是Raphael被附加到了不完全渲染而不是另一個渲染的svg。 – LeakyBucket
@LeakyBucket,你有沒有想念費米的編輯?正如他所說,它應該是'textPath'(注意大寫字母P)。 – mercator