gpt4 book ai didi

javascript - Fabric.js 的文本框不换长字

转载 作者:数据小太阳 更新时间:2023-10-29 05:11:55 25 4
gpt4 key购买 nike

我正在使用 Fabric.jsTextbox。我给了一个固定的宽度。但是,如果用户键入一个没有任何空格且超出文本框给定宽度的长单词,则它不会换行。

有什么解决办法吗?

最佳答案

是的,您可能喜欢或不喜欢实现分词的解决方案:

覆盖 fabric 默认的换行函数:

fabric.Textbox.prototype._wrapLine = function(ctx, text, lineIndex) {
var lineWidth = 0,
lines = [],
line = '',
words = text.split(' '),
word = '',
letter = '',
offset = 0,
infix = ' ',
wordWidth = 0,
infixWidth = 0,
letterWidth = 0,
largestWordWidth = 0;

for (var i = 0; i < words.length; i++) {
word = words[i];
wordWidth = this._measureText(ctx, word, lineIndex, offset);
lineWidth += infixWidth;

// Break Words if wordWidth is greater than textbox width
if (this.breakWords && wordWidth > this.width) {
line += infix;
var wordLetters = word.split('');
while (wordLetters.length) {
letterWidth = this._getWidthOfChar(ctx, wordLetters[0], lineIndex, offset);
if (lineWidth + letterWidth > this.width) {
lines.push(line);
line = '';
lineWidth = 0;
}
line += wordLetters.shift();
offset++;
lineWidth += letterWidth;
}
word = '';
} else {
lineWidth += wordWidth;
}

if (lineWidth >= this.width && line !== '') {
lines.push(line);
line = '';
lineWidth = wordWidth;
}

if (line !== '' || i === 1) {
line += infix;
}
line += word;
offset += word.length;
infixWidth = this._measureText(ctx, infix, lineIndex, offset);
offset++;

// keep track of largest word
if (wordWidth > largestWordWidth && !this.breakWords) {
largestWordWidth = wordWidth;
}
}

i && lines.push(line);

if (largestWordWidth > this.dynamicMinWidth) {
this.dynamicMinWidth = largestWordWidth;
}

return lines;
};

用法:

var breakingTextbox = new fabric.Textbox(longText, {
width: 200,
breakWords: true
});

关于javascript - Fabric.js 的文本框不换长字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37858237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com