Html5 canvas 无法为画布上的文本生成动态位置

Html5 canvas 无法为画布上的文本生成动态位置,html5-canvas,Html5 Canvas,在下面的示例中,我尝试使用画布获取文本绘制的动态点 但是ctx.fillText在没有任何数字的情况下使用时不会显示任何内容 请帮忙 感谢这是因为canvas的宽度和高度设置非常有趣,要让它按预期播放,请直接在元素和样式上设置宽度和高度: <canvas id="myCanvas" width=500 height=240 style='width:500px;height:240px'></canvas> 这是因为画布的宽度和高度设置很有趣,要让它按预期播放,请直接

在下面的示例中,我尝试使用画布获取文本绘制的动态点

但是ctx.fillText在没有任何数字的情况下使用时不会显示任何内容

请帮忙


感谢

这是因为canvas的宽度和高度设置非常有趣,要让它按预期播放,请直接在元素和样式上设置宽度和高度:

<canvas id="myCanvas" width=500 height=240 style='width:500px;height:240px'></canvas>

这是因为画布的宽度和高度设置很有趣,要让它按预期播放,请直接在元素和样式上设置宽度和高度:

<canvas id="myCanvas" width=500 height=240 style='width:500px;height:240px'></canvas>

正如@Starcrawer1984所说,画布的默认大小是300x150,因此除非您的文档很小,否则您将尝试绘制超出画布大小的文本

由于您正在动态设置fillText的
x
值,您可能还应该动态调整画布的大小:

var canvas = $("#myCanvas")[0];    
var ctx = canvas.getContext("2d");

onResized("sanjana",100);           

function onResized(text,y){

    // resizing the canvas will also clear the canvas
    // so resize the canvas first

    var width_ = ($(document).width())/2;
    canvas.width=2*width_;

    // set the font size and measure the text width

    ctx.font = "60px Comic";
    var textWidth=ctx.measureText(text).width;

    // draw the text centered on the document

    ctx.fillText(text, width_ - textWidth/2, y);    

}

正如@Starcrawer1984所说,画布的默认大小是300x150,因此除非您的文档很小,否则您将尝试绘制超出画布大小的文本

由于您正在动态设置fillText的
x
值,您可能还应该动态调整画布的大小:

var canvas = $("#myCanvas")[0];    
var ctx = canvas.getContext("2d");

onResized("sanjana",100);           

function onResized(text,y){

    // resizing the canvas will also clear the canvas
    // so resize the canvas first

    var width_ = ($(document).width())/2;
    canvas.width=2*width_;

    // set the font size and measure the text width

    ctx.font = "60px Comic";
    var textWidth=ctx.measureText(text).width;

    // draw the text centered on the document

    ctx.fillText(text, width_ - textWidth/2, y);    

}

这里有几件事:

jQuery脚本未正确加载(在jsBin中)。您可以将jQuery放在标题中,也可以在jQuery加载后配置jsbin加载脚本

您应该使用画布元素的宽度和高度属性为画布元素定义位图大小(不需要使用样式设置额外的宽度/高度,应该避免为画布元素设置其他宽度/高度)

如果不是,画布默认为300x150。当您在查询中使用文档作为宽度的基础时,在大多数情况下,文本位置会非常偏离

你可以设置

canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
如果希望画布填充客户端窗口。附加一个窗口。onresize

$(window).on('resize, ...)
在客户端窗口更改大小时更新大小

然后使用
canvas.width
作为文本放置的基础:

var width_ = canvas.width * 0.5;
要居中文本,请将画布文本对齐设置为居中

ctx.textAlign = 'center';

这里有几点:

jQuery脚本未正确加载(在jsBin中)。您可以将jQuery放在标题中,也可以在jQuery加载后配置jsbin加载脚本

您应该使用画布元素的宽度和高度属性为画布元素定义位图大小(不需要使用样式设置额外的宽度/高度,应该避免为画布元素设置其他宽度/高度)

如果不是,画布默认为300x150。当您在查询中使用文档作为宽度的基础时,在大多数情况下,文本位置会非常偏离

你可以设置

canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
如果希望画布填充客户端窗口。附加一个窗口。onresize

$(window).on('resize, ...)
在客户端窗口更改大小时更新大小

然后使用
canvas.width
作为文本放置的基础:

var width_ = canvas.width * 0.5;
要居中文本,请将画布文本对齐设置为居中

ctx.textAlign = 'center';

+1,是的,画布太小,无法将文本显示为动态计算的
x
+1,是的,画布太小,无法将文本显示为动态计算的
x
为什么不使用
ctx.textAlign='center'
,而不是手动测量文本宽度?@Ken。。。这也行。但是,我假设计算startingX将有助于在画布上进行后续绘制。(我想这篇孤独的文字不会是画布上唯一的东西。)@markE:正如我刚开始学习jquery一样,你的解决方案帮助很大。我在代码中还有一个疑问,为什么在创建var canvas=$(“#myCanvas”)[0]这样的画布对象时使用索引0;当您执行$(“#myCanvas)时,您将获得一个id=myCanvas的所有元素的集合(是的,应该只有1个,但jquery仍然返回一个集合)。因此[0]将从集合中获取单个元素。干杯!为什么不使用
ctx.textAlign='center'
而不是手动测量文本宽度?@Ken…这也行。但是,我认为计算startingX将有助于在画布上进行后续绘制。(我认为在画布上绘制的不仅仅是这个孤独的文本)@markE:正如我刚刚开始学习jquery一样,您的解决方案帮助很大。我对代码还有一个疑问,为什么在创建var canvas=$(“#myCanvas”)[0]等画布对象时使用索引0;当您使用$(“#myCanvas”)时,您将获得id=myCanvas的所有元素的集合(是的,应该只有1,但jquery仍然返回集合)。因此[0]将从集合中获取单个元素。干杯!