【发布时间】:2019-12-15 15:20:17
【问题描述】:
我正在尝试显示已存储在 MariaDB 中的文本区域信息。我存储文本信息没有问题。我遇到的问题是将格式从文本区域转换到我希望在其中显示的画布。
目标是让用户在文本区域中填写注释,然后将这些注释显示在单独的画布报告中。
现在,我可以使用我存储在 wordWrap.js 文件中的代码成功地使自动换行:
function wrapText (c, text, x, y, maxWidth, lineHeight) {
var words = text.split(' ');
var line = '';
var lineCount = 0;
var test;
var metrics;
for (var i = 0; i < words.length; i++) {
test = words[i];
// add test for length of text
metrics = c.measureText(test);
while (metrics.width > maxWidth) {
test = test.substring(0, test.length - 1);
metrics = c.measureText(test);
}
if (words[i] != test) {
words.splice(i + 1, 0, words[i].substr(test.length))
words[i] = test;
}
test = line + words[i] + ' ';
metrics = c.measureText(test);
if (metrics.width > maxWidth && i > 0) {
c.fillText(line, x, y);
line = words[i] + ' ';
y += lineHeight;
lineCount++;
}
else {
line = test;
}
}
c.fillText(line, x, y);
}
我可以添加文本,根据 fillText 区域的大小和单词的长度来换行。我需要补充的是支持回车的能力。用户使用 \n 支持回车不会有问题,所以我只需要让它工作。
我见过其他支持回车的代码。我在下面玩过的例子。
ctx.font = '12px Courier';
var text = <?php echo json_encode($row['notes']);?>;
var x = 30;
var y = 30;
var lineheight = 15;
var lines = text.split('\n');
for (var i = 0; i<lines.length; i++) {
ctx.fillText(lines[i], x, y + (i*lineheight) );
}
这些方法具有相似的属性,我相信它们可以对齐,但我无法弄清楚如何实现驱动文本拆分的两个脚本的关键部分......
text.split('\n')
text.split(' ')
在我看来,这就像 word wrap 使用的 for 和 while 循环的组合,但我需要一些帮助来确定在哪里。
【问题讨论】:
标签: javascript canvas