说我有三个数字

2.55

2353.45

232.44

我想写在画布上,以便三个数字根据小数点对齐,如下所示。

     2.55

  2353.45

   232.44


我知道context.textAlign属性,但是它只有5个选项:left,right,center,start,end。
我已经在互联网上搜索过,但找不到任何帮助。请帮助。

最佳答案

您可以使用measureText()方法及其返回的TextMetrics对象,以计算点之前数字的宽度。



var canvas = document.getElementById('canvas'),
  ctx = canvas.getContext('2d'),
  texts = [];
ctx.font = '14px sans-serif';
// fill our array with test-cases
for(var i=0; i<7; i++)
  texts.push(randLengthedNum() + '.' + randLengthedNum());

texts.forEach(drawText);

function drawText(str, i) {
  var left_part = str.split('.')[0],
    // get the width of the left part
    left_width = ctx.measureText(left_part).width,
    // the width of the dot
    dot_width = ctx.measureText('.').width,
    // places the '.' at center of the canvas
    x = (canvas.width / 2) - (left_width + (dot_width / 2));
  ctx.fillText(str, x, (i+1) * 20);
}

// return random lengthed numbers
function randLengthedNum(){
  return (Math.random()).toFixed(2+(Math.random()*8)|0).substr(2);
}

#canvas{
  border: 1px solid;
}

<canvas id="canvas"></canvas>

10-08 17:20