有没有办法根据文本行数调整画布高度?文本将驻留在画布的底部。图像也会在画布的最左上角位置被绘制到画布的同一时间,因此文本将始终从画布正下方的固定位置开始。我只想让画布根据文本行数进行垂直调整,而不是在输入文本时,而不是在文本输入到textarea后单击按钮后。HTML 5画布|根据文本行数调整画布高度?
我使用这个文本:
...
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行文字。我不知道在代码中修改/添加的位置(请参阅代码中的注释)。任何提示?
UPDATE瓦特/ FIDDLE
这里的实验用小提琴。请在你的答案中使用那个小提琴。在小提琴中阅读TODO评论。我很难过,但我们差不多了! Thx输入。 http://jsfiddle.net/uL84x7vw/12/
UPDATE瓦特/ FIDDLE
这是小提琴与以前相同,但图像占位符代码移动到的小提琴代码底部,所以它不会被清除。它看起来更好,但除了文本的最后一行外,所有文本行仍然被清除。显然有些代码缺失。 Thx输入。 http://jsfiddle.net/uL84x7vw/15/
在我的代码中,我可以实现你的代码?另外,不需要画布重绘? Thx输入。 – koolness 2014-09-03 00:15:57
应该能够在返回之前(y)做到这一点,在您的评论是 - 这是假设你只需要增加6行后的高度。 根据http://stackoverflow.com/questions/4938346/canvas-width-and-height-in-html5它会清除画布(并需要重绘),但你也应该手动清除那些浏览器的画布不。 – Jason 2014-09-03 00:26:15
重绘意味着用新参数重复我的功能?我尝试过,但每次使用它时都会增加高度。我明天会提供一个小提琴进行测试。 Thx输入。 – koolness 2014-09-03 03:00:10