Html5 canvas 如何调整画布上文本的大小
我已经找到了一种方法,可以通过以下代码在普通HTML5画布上调整和压缩我的文本:Html5 canvas 如何调整画布上文本的大小,html5-canvas,fabricjs,Html5 Canvas,Fabricjs,我已经找到了一种方法,可以通过以下代码在普通HTML5画布上调整和压缩我的文本: $("input").on("input", function() { ctx.clearRect(0, 0, 400, 400); var width = ctx.measureText(text).width; if(width <= 100) { ctx.fillText(text, 0, 100); } else { ctx.save(); ctx.scale(100 / wi
$("input").on("input", function() {
ctx.clearRect(0, 0, 400, 400);
var width = ctx.measureText(text).width;
if(width <= 100) {
ctx.fillText(text, 0, 100);
} else {
ctx.save();
ctx.scale(100 / width, 1);
ctx.fillText(text, 0, 100);
ctx.restore();
}
$(“输入”)。关于(“输入”,函数(){
ctx.clearRect(0,040400);
var width=ctx.measureText(text).width;
如果(width是的,请在创建文本元素后检查其宽度,并在将其添加到画布之前根据需要设置ScaleX属性:
var canvas = new fabric.Canvas('c');
var t;
canvas.renderAll();
$("input").on("input", function () {
if (t) {
canvas.remove(t);
}
var textToDraw = $(this).val();
t = new fabric.Text(textToDraw, {
left: 0,
top: 0
});
if (t.width > c.width) {
console.log('scale -> ' + (c.width / t.width));
t.setScaleX(c.width / t.width);
}
canvas.add(t);
});
如果要在对象调整大小时执行此操作,请使用修改后的事件处理程序,如下所示:
function scaleText() {
console.log("scale=" + t.getScaleX() + " w=" + t.getWidth());
if ((t.width * t.getScaleX()) > c.width) {
t.setScaleX(c.width / t.width);
}
}
$("input").on("input", function () {
if (t) {
canvas.remove(t);
}
var textToDraw = $(this).val();
t = new fabric.Text(textToDraw, {
left: 0,
top: 0
});
scaleText();
t.on("modified", function (options) {
scaleText();
});
canvas.add(t);
});
我想澄清的是,当对象帧处于画布的最大宽度且未调整高度(Y轴)的大小时,也就是说,如果文本太长,我希望将文本压缩在一起。我还做了另一个限制,使对象仅限于画布的大小,它们无法关闭。我遇到的问题是,当有人调整文本对象的大小时,我需要能够调整文本的大小,而不是在它调整大小之前已经写入画布。确实不清楚您想要实现什么,您是否能够生成JSFIDLE或类似的工具来说明问题?我正在尝试执行您提到的操作,但在文本写入画布后执行。我已添加到答案中,以显示当用户调整文本对象的大小时如何执行此操作