Javascript FabricJS具有动态字体大小的固定大小文本框(收缩文本以适应大小)

Javascript FabricJS具有动态字体大小的固定大小文本框(收缩文本以适应大小),javascript,typescript,fabricjs,Javascript,Typescript,Fabricjs,如果文本框中的文本变大,如何修复文本框的大小并动态减小字体大小?是的,存在一个类似的问题,但它只适用于一行文本 我想准确地做到这一点:(来自的示例) 我尝试过以下方法: let text = new fabric.Textbox(box.text, { top: box.top, left: box.left, width: box.width, }); if (text.width > box.width) { text.fontSize *= box.

如果文本框中的文本变大,如何修复文本框的大小并动态减小字体大小?是的,存在一个类似的问题,但它只适用于一行文本

我想准确地做到这一点:(来自的示例)

我尝试过以下方法:

let text = new fabric.Textbox(box.text, {
    top: box.top,
    left: box.left,
    width: box.width,
});
if (text.width > box.width) {
    text.fontSize *= box.width / (text.width + 1);
    text.width = box.width;
}
if (text.height > box.height) {
    text.fontSize *= box.height / (text.height + 1);
    text.height = box.height;
}
canvas.add(text);

这样fontSize会随着文本框的宽度或高度的变化而减小。但这有时会导致文本变得非常小,因为文本不会被包装得尽可能好。字体大小和包装需要找到一个最佳的方式。有什么想法吗?谢谢

我真的找到了解决办法。以防有人有同样的问题

根据宽度调整字体大小与我的原始代码配合得很好:

if (text.width > box.width) {
    text.fontSize *= box.width / (text.width + 1);
    text.width = box.width;
}
这只会调整很长单词的字体大小,因为文本框会自动包装文本。但是这种包装会导致高度在我的原始代码中收缩过多。为了考虑换行,我最终逐渐减小字体大小,并通过每次调用
canvas.renderAll()
重新计算文本换行:

while (text.height > box.height && text.fontSize > 12) {
    text.fontSize--;
    canvas.renderAll();
}
这可能是低效的,但它符合我的用例