2012-06-12 12 views
6

Per il rendering SVG sto usando il plugin SVG jQuery. E, ora voglio aggiungere del testo a ogni percorso e poligono. Su jsFiddle puoi vedere il markup generato dal plugin.Come posizionare il testo al centro di un percorso svg

Per la creazione di testo che ho scritto il seguente codice:

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')); 

Nel codice su jsFiddle si può vedere che il tag textpath esiste, ma non è visibile. Come aggiungere testo al centro di ciascun percorso?
Grazie.

+0

Cosa intendi con "centro di ogni percorso"? Vuoi dire che vuoi il testo nel mezzo della forma, o vuoi che il testo sia centrato sul percorso stesso ma continui a seguire il percorso (centrato attorno al 50% della lunghezza totale del percorso)? –

+0

Voglio il testo nel mezzo della forma. – user1260827

+0

Ok, quindi aggiorna/chiarisci la tua domanda sopra. –

risposta

12

per inserire il testo in linea retta sulla cima di una forma, nel bel mezzo della Sede BoundingBox:

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

E 'appena aggiunge un po' di javascript per inserire il testo.

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]) 
} 

È possibile che guarda solo a elementi di percorso, ma si potrebbe modificare il selettore per includere tutto ciò che serve.

+0

Sembra che l'esempio di jsfiddle non funzioni più –

+1

Dovrebbe funzionare ora. –

+0

Impressionante Grazie! –

1

Ci sono un paio di problemi qui.

a) SVG fa distinzione tra maiuscole e minuscole, quindi è textPath e non textpath.

b) textPath deve essere racchiuso in un elemento di <text> per essere valido

Ecco la tua jsFiddle fixed up.

+0

'textpath' funziona bene anche. Tuttavia, Jquery SVG non aggiunge l'elemento '' e 'xlink'. Inoltre, voglio localizzare il testo al centro. – user1260827

+0

xlink è facoltativo. startOffset = "50" text-anchor = "middle" lo centrerà. Ho aggiornato jsFiddle con gli attributi startOffset e anchor di testo. –

+0

Fiddle non funziona :-( – foobarbecue