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