2012-06-12 19 views
6

SVGをレンダリングするために、私はjQuery SVGプラグインを使用しています。そして今、各パスとポリゴンにテキストを追加したいと思います。 jsFiddleには、生成されたマークアップがプラグインで表示されます。あなたはtextpathタグが存在していることを見ることができますが、それが表示されていないjsFiddle上のコードではSVGパスの中心にテキストを配置する方法

var svgg = $("#rsr").svg('get'); 
var texts = svgg.createText(); 
svgg.textpath($("#Layer_x0020_1"),id, texts.string('We go '). 
    span('up', { dy: -30, fill: 'red' }).span(',', { dy: 30 }). 
    string(' then we go down, then up again')); 

:私は、次のコードを書いたテキストを作成するための

。 各パスの中央にテキストを追加するにはどうすればよいですか?
ありがとうございます。

+0

「各パスの中心」とはどういう意味ですか?あなたは、図形の真ん中にテキストが欲しいということを意味しますか、テキストをパス自体の中心に置いても、パスの後ろに(パスの長さの約50%を中心にして)続けますか? –

+0

私は、図形の中央にテキストが欲しいです。 – user1260827

+0

さて、上記の質問を更新/明確化してください。 –

答えて

12

http://jsfiddle.net/dYuAA/114/

それはちょうどテキストを配置するために、いくつかのJavaScriptを追加します。

function addText(p) 
{ 
    var t = document.createElementNS("http://www.w3.org/2000/svg", "text"); 
    var b = p.getBBox(); 
    t.setAttribute("transform", "translate(" + (b.x + b.width/2) + " " + (b.y + b.height/2) + ")"); 
    t.textContent = "a"; 
    t.setAttribute("fill", "red"); 
    t.setAttribute("font-size", "14"); 
    p.parentNode.insertBefore(t, p.nextSibling); 
} 

var paths = document.querySelectorAll("path"); 
for (var p in paths) 
{ 
    addText(paths[p]) 
} 

上記は、パス要素を調べるだけですが、必要なものを含めるようにセレクタを調整することもできます。

+0

jsfiddleの例がもう機能していないようです。 –

+1

今すぐ動作します。 –

+0

恐ろしいありがとう! –

1

ここにいくつかの問題があります。

a)SVGは大文字と小文字が区別されるため、textPathでありテキストパスではありません。

B)textPathは

はここにあなたのjsFiddle fixed upだ有効であることが<text>要素で囲む必要があります。参照バウンディングボックスの真ん中に、形状の上に一直線にテキストを配置するには

+0

'textpath'もうまくいきます。しかし、Jquery SVGは ''要素と 'xlink'を追加しません。また、テキストを中央に配置したい – user1260827

+0

xlinkはオプションです。 startOffset = "50" text-anchor = "middle"は中央に配置されます。 jsFiddleをstartOffset属性とtext-anchor属性で更新しました。 –

+0

フィドルがうまくいきません:-( – foobarbecue