代码之家  ›  专栏  ›  技术社区  ›  beingalex

对正字母html5画布-Js小提琴示例

  •  0
  • beingalex  · 技术社区  · 11 年前

    Here is a JSFiddle. -字符串的长度越大,右侧添加的空间就越多。

    我正在尝试创建一些代码来证明画布上的文本的合理性:

    var ctx = this.ctx; // Is now canvas context
    
    var str = 'A random string';
    
    var width = 500; // The size that the string should fit to
    
    var strWidth = this.ctx.measureText(str); // The width in pixels of the string when it's put on canvas
    
    var chars = str.split(''); // Make an array of string
    
    var space = (width - strWidth.width) / (chars.length - 1);
    
    var xpos = 1; // Start of text X position 
    
    this.ctx.clearRect(0,0,750,750);
    
        var ctx = this.ctx;
    
    Array.each(chars, function(char) {
        ctx.fillText(char, xpos, 1);  
        xpos += space.toInt();          
    });
    

    我不希望这些词有正当理由,相反,我希望这些字母有正当理由。

    基本上,这会迭代字符串的字符,并将它们绘制到画布上,每个字符之间增加间距以填充一定的宽度。这个代码似乎在右边添加了太多的空格。字符串的字符长度越大,右侧添加的空间就越多。

    我认为这可能与 space 变量计算。我试图通过延长每个字符之间的空间,将一个随机长度的字符串放入一个特定的空间。

    感谢您的帮助!

    1 回复  |  直到 11 年前
        1
  •  1
  •   user1693593 user1693593    11 年前

    您非常接近,但您只添加了空格的宽度,而忘记了添加字符的宽度:

    试试这个,它应该会起作用:

    xpos += space + ctx.measureText(char).width;
    

    MODIFIED FIDDLE HERE

    此外,为了获得更高的精度,您不应该将间距四舍五入为整数值。画布可以处理子像素化,它会给出更好的结果(我在小提琴中也在画布中修改了这个来演示)。