【发布时间】:2014-09-04 22:08:23
【问题描述】:
有没有办法根据文本行数调整画布的高度?文本将位于画布底部。图像也将在画布的最左上角绘制到画布中,同时也是文本,因此文本将始终从图像下方画布上的固定位置开始。我只想让画布根据文本行数垂直调整大小,而不是在我输入时,只有在我在文本区域中输入文本后单击按钮后。
我用这个来写文字:
...
var str = $('#TEXTAREA').val();
var splittext = $.map(str.split(" "), function (t) { // Split words > than 40 chars
return t.match(/[\s\S]{1,40}/g) || [];
}).join(" ");
qrc.font = 'normal normal 14px monospace';
qrc.textAlign = 'center';
qrc.fillStyle = '#000';
wrapText(qrc, splittext, x, y, maxWidth, lineHeight);
function wrapText(context, text, x, y, maxWidth, fontSize, fontFace){
var words = text.split(' ');
var line = '';
var lineHeight = fontSize;
context.font=fontSize+" "+fontFace;
for(var n = 0; n < words.length; n++){
var testLine = line + words[n] + ' ';
var metrics = context.measureText(testLine);
var testWidth = metrics.width;
if(testWidth > maxWidth) {
context.fillText(line, x, y);
line = words[n] + ' ';
y += lineHeight;
if(++lineCount>6){return(y);} // Change to "Add 14px to canvas height at each line count" ?
}
else {
line = testLine;
}
}
context.fillText(line, x, y);
return(y);
}
目前,此代码不会打印超过 6 行文本的文本。我不知道在代码中的哪里修改/添加(参见代码中的 cmets)。有什么提示吗?
更新 w/ FIDDLE
这是一个可供试验的小提琴。请在你的答案中使用那个小提琴。阅读小提琴中的 TODO 评论。我被难住了,但我们快到了!谢谢输入。 http://jsfiddle.net/uL84x7vw/12/
更新 w/ FIDDLE
这个小提琴与之前的相同,但将图像占位符代码移动到小提琴代码的底部,因此它不会被清除。它看起来更好,但除了最后一行文本之外的所有文本行仍然被清除。显然缺少一些代码。谢谢输入。 http://jsfiddle.net/uL84x7vw/15/
【问题讨论】:
标签: javascript jquery html5-canvas