Raphael JS and Text positioning?

前端 未结 4 1441
花落未央
花落未央 2020-12-23 14:02

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!\");
<         


        
相关标签:
4条回答
  • 2020-12-23 14:12

    Resolved!

    By using the following

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

    it now aligns text on the left.

    0 讨论(0)
  • 2020-12-23 14:20

    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.

    0 讨论(0)
  • 2020-12-23 14:28

    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

    0 讨论(0)
  • 2020-12-23 14:32

    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'});
    
    0 讨论(0)
提交回复
热议问题