Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不能同时设置画布宽度和更改字体?_Javascript_Css_Html5 Canvas - Fatal编程技术网

Javascript 不能同时设置画布宽度和更改字体?

Javascript 不能同时设置画布宽度和更改字体?,javascript,css,html5-canvas,Javascript,Css,Html5 Canvas,在JSFIDLE中,调用measureText设置画布宽度: tCtx.canvas.width = tCtx.measureText(this.value).width; 覆盖字体大小: tCtx.font = "25px serif" 如果删除对measureText的调用,则画布将使用预期的字体大小。不幸的是,我不得不猜测画布的宽度。这是为什么?有更好的方法吗?只需将tCtx.font语句移动到fillText语句之前即可 tCtx.canvas.width

在JSFIDLE中,调用measureText设置画布宽度:

tCtx.canvas.width = tCtx.measureText(this.value).width;
覆盖字体大小:

tCtx.font = "25px serif"

如果删除对measureText的调用,则画布将使用预期的字体大小。不幸的是,我不得不猜测画布的宽度。这是为什么?有更好的方法吗?

只需将tCtx.font语句移动到fillText语句之前即可

   tCtx.canvas.width = tCtx.measureText(this.value).width;
   tCtx.font = 'bold 24px serif';
   tCtx.fillText(this.value, 0, 10);

更改画布维度也会重置上下文。调整大小后,您需要再次设置字体(以及任何其他非默认设置)

tCtx.font='bold 24px serif';
tCtx.canvas.width=tCtx.measureText(this.value).width;
tCtx.font=‘粗体24px衬线’;
tCtx.fillText(该值为0,10);

在调整大小时,保存的状态(通过/)也会丢失。如果希望对画布状态进行大量更改,您可能希望将这些更改分解为自己的
.save()
/
.restore()
函数。

但是
.measureText()
正在使用旧的或默认的字体设置。您需要在调整大小之前和调整大小之后分别定义两次