Рафаэль Дж. С. и позиционирование текста? - PullRequest
44 голосов
/ 24 января 2010

Я пытаюсь расположить текст внутри холста SVG, предоставив x, y координаты

var t = paper.text(50, 50, "Raphaël\nkicks\nbutt!");

, но не позиционирует текст, как все другие объекты ...

x, y координаты указывают центр объекта! Не "слева и сверху" пикселей!


Я хотел бы "выравнивание по левому краю" текст вдоль линии, аналогично стандартному HTML.

Помощь будет очень признательна.

Ответы [ 4 ]

150 голосов
/ 29 сентября 2010

Свойство Text-anchor для текстового метода по умолчанию установлено в 'middle'.

Если вы хотите выровнять его по левому краю, измените привязку текста в атрибутах объекта:

var t = paper.text(50, 50, "Raphaël\nkicks\nbutt!").attr({'text-anchor': 'start'});
20 голосов
/ 03 сентября 2012

Я знаю, вы не сказали, что вам нужно выровнять его по вертикали, но если вы хотите использовать paper.text вместо paper.print ... и хотели бы выровнять по вертикали, чтобы быть верхним.

Попробуйте это:

function alignTop(t) {
    var b = t.getBBox();
    var h = Math.abs(b.y2) - Math.abs(b.y) + 1;

    t.attr({
        'y': b.y + h
    });
}

И просто передайте ему текстовый объект Рафаэля. Это выровняет это для Вас. и просто вызвать эту функцию

10 голосов
/ 24 января 2010

Решено!

Используя следующее

paper.print(100, 100, "Test string", paper.getFont("Times", 800), 30);

теперь выравнивает текст по левому краю.

0 голосов
/ 19 октября 2013

Следующий код хорошо работает в IE, Chrome (Firefox не тестировался):

var t = paper.text(50, 50, "Raphaël\nkicks\nbutt!"),
    b = t._getBBox();
t.translate(-b.width/2,-b.height/2);

Пояснение:

в Рафаэле, текст центрируется вокруг заданного вами x & y по умолчанию, вы можете установить выравнивание по левому краю:

t.attr({'text-anchor':'start'})

но у вас нет атрибута для его выравнивания по верху. Я сначала попробовал:

var b=t.getBBox(); 

но он вернул NaN в IE, поэтому я обратился к:

var b=t._getBBox();

_getBBox () недокументирован, но используется внутри самого Рафаэля и работает!

Надеюсь, это поможет.

...