2010-03-30 5 views
21

Sto usando Raphael js per disegnare numeri cerchiati. Il problema è che ogni numero ha una larghezza/altezza diversa, quindi usare un set di coordinate per centrare il testo non funziona. Il testo viene visualizzato in modo diverso tra IE, FF e Safari. C'è un modo dinamico per trovare l'altezza/larghezza del numero e centrarlo di conseguenza?Posizionamento del testo di Raffaello: centraggio del testo in un cerchio

Qui è la mia pagina di prova:

http://jesserosenfield.com/fluid/test.html

e il mio codice:

function drawcircle(div, text) { 
    var paper = Raphael(div, 26, 26); //<< 
    var circle = paper.circle(13, 13, 10.5); 
    circle.attr("stroke", "#f1f1f1"); 
    circle.attr("stroke-width", 2); 
    var text = paper.text(12, 13, text); //<< 
    text.attr({'font-size': 15, 'font-family': 'FranklinGothicFSCondensed-1, FranklinGothicFSCondensed-2'}); 
    text.attr("fill", "#f1f1f1"); 
} 

window.onload = function() { 
    drawcircle("c1", "1"); 
    drawcircle("c2", "2"); 
    drawcircle("c3", "3"); 
}; 

Grazie mille!

risposta

9

Forse questo:

var paper = Raphael(div, 26, 26); //<< 
var circle = paper.circle(13, 13, 10.5); 
circle.attr("stroke", "#f1f1f1"); 
circle.attr("stroke-width", 2); 
var text = paper.text(0, 0, text); //<< 
text.attr({'font-size': 15, 'font-family': 'FranklinGothicFSCondensed-1, FranklinGothicFSCondensed-2'}); 
text.attr("fill", "#f1f1f1"); 
text.translate((35 - text.getBBox().width)/2, (45 - text.getBBox().height)/2); 
+1

uscita di questo codice sembra migliore: text.translate (paper.width/2, paper.height/2); –

+0

'text.getBBox(). Width' non funziona come sempre restituisce 0 :( – stej

0

L'Rotating Text Exactly esempio (elencato nella colonna di destra della pagina, o here in github), discute inserire il testo in una posizione precisa, insieme, come al solito, passaggi aggiuntivi richiesti far funzionare le cose in IE.

Trova un riquadro di delimitazione per il testo; Immagino che sia semplice spostare il testo di metà del riquadro di delimitazione come suggerito da Jan.

31

(Risposta riscritta): Raphael.js centra i nodi di testo sia orizzontalmente che verticalmente per impostazione predefinita.

"Centraggio" qui significa che l'argomento x, y del metodo paper.text() si aspetta il centro del riquadro di delimitazione del testo.

Allora, specificando lo stesso valore x, y come il cerchio dovrebbe produrre il risultato desiderato:

var circle = paper.circle(13, 13, 10.5); 
var text = paper.text(13, 13, "10"); 

Example output

(jsFiddle)

codice sorgente Rilevante:

3

Utilizzare questo attributo: 'text-anchor':'start':

paper.text(x, y, text).attr({'text-anchor':'start'}); 
+0

Grazie! Ciò è molto utile. Avevamo molti problemi nell'allineare i testi all'interno dei raphaels SVG, ma grazie a questo tutti i miei problemi sono spariti! Tu rock: D – taxicala

Problemi correlati