开发者

html canvas text size not accurate

I am trying to center text in a box, but the ctx.measureText() is not returning accurate values. When the below code is run, the text is not accurately centered. It runs for me under google chrome, but I couldn't get it to run under jsfiddle (sorry)

<html>
    <head>
       <script type="text/javascript">
           function writeText(){
                canvas=document.getElementById('canvas');
                ctx = canvas.getContext('2d');
                ctx.fillStyle='rgb(250,0,0)';   //red box
                ctx.fillRect(100,100,300,300); //box of size 200x200 drawn at (100,100)
                ctx.fillStyle='rgb(0,250,0)';

            yOff=0;
            for (var i=0;i<4;i++){
                  text="Hello World";
                size=20+i*10
                font='bold '+size+'px serif';
                  ctx.font=font;
                  ctx.textBaseline='top';
                  width=ctx.measureText(font,text).width;    
                  height=size;   

                  x=100+(300-width)/2;    //draw inside the rectangle of 100x100 at pos (0,0)
                  y=(300-height)/2+yOff;    //draw inside the rectangle of 100x100 at pos (0,0)    
                  ctx.fillText(text,x,y);
                yOff+=50
            }
           }
        </script>
    </head>
            <body onload="writeText();" bgcolor="yellow">
                <canvas name="canvas" id="canvas" wi开发者_运维技巧dth="500" height="500"></canvas> 
            </body>
</html>


You are accidentally measuring the font string instead of text each time!

measureText has only one argument and you are giving it two. It should just be

width = ctx.measureText(text).width;

Here it is in jsfiddle:

http://jsfiddle.net/PtSAf/19/

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜