Raphael JS and Text positioning?

六眼飞鱼酱① 提交于 2019-12-18 10:18:11

问题


I'm trying to position text within the SVG canvas, by supplying x, y coordinates

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

but does not position the text like all other objects...

x, y coordinates specify the center of the object! Not the "left and top most" pixel!


I would like to "left align" the text along a line, same as standard HTML.

Help would be very much appreciated.


回答1:


Text-anchor property for text method is set to 'middle' by default.

If you want to left align it then change text-anchor in attributes for the object:

var t = paper.text(50, 50, "Raphaël\nkicks\nbutt!").attr({'text-anchor': 'start'});



回答2:


I know you didn't say you need to vertical align it to top, but if you want to use paper.text instead of paper.print... and would like to vertical align to be top.

Try this:

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

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

And just pass the Raphael text object to it. It will top align it for you. and just call that function




回答3:


Resolved!

By using the following

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

it now aligns text on the left.




回答4:


Following code works well in IE , Chrome (Firefox not tested):

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

Explanation:

in Raphael , text is centered around your given x & y by default, you can set left align with:

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

but you have no attribute to set it top align. I firstly tried :

var b=t.getBBox(); 

but it returned NaN in IE, so I turned to:

var b=t._getBBox();

_getBBox() is undocumented but used internally by Raphael itself , and it works!

Hope it helps.



来源:https://stackoverflow.com/questions/2124763/raphael-js-and-text-positioning

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!