我正在尝试手动换行覆盖图像的文本。目前我有一个文本输入框,用户可以在其中键入一个句子,覆盖文本会更新每个按键上显示的文本。叠加文本使用文本转换来曲线和重新整形文本,因此它不会自动换行到新行。并且输入字段是大于包裹切断长度的固定尺寸。
如果文本超过10个字符,我试图打破一个新行,但这并不能说明它是否在一个单词的中间。如何检测最后一个单词的结尾并在那里中断呢?
感谢您的帮助。
$("input[name='text']").keyup(function(event) {
var text = $(this).val();
var breakText = '';
while (text.length > 0) {
breakText += text.substring(0, 10) + '\n';
text = text.substring(10);
}
$("p.overlay").html(breakText);
});
宽度无法添加到重叠的文本中,因为它会像螺旋一样循环,然后重新进入自身。遗憾的是,宽度对文本没有包装效果。
答案 0 :(得分:1)
试试这个解决方案。希望它有所帮助
function explode(text, max) {
text = text.replace(/ +/g, " ").replace(/^ /, "").replace(/ $/, "");
if (typeof text === "undefined") return "";
if (typeof max === "undefined") max = 10;
if (text.length <= max) return text;
var exploded = text.substring(0, max);
text = text.substring(max);
if (text.charAt(0) !== " ") {
while (exploded.charAt(exploded.length - 1) !== " " && exploded.length > 0) {
text = exploded.charAt(exploded.length - 1) + text;
exploded = exploded.substring(0, exploded.length - 1);
}
if (exploded.length == 0) {
exploded = text.substring(0, max);
text = text.substring(max);
} else {
exploded = exploded.substring(0, exploded.length - 1);
}
} else {
text = text.substring(1);
}
return exploded + "\n" + explode(text);
}
var text = "My dog has fleas the quick brown fox jumps over the lazy dog etc.";
var exploded = explode(text);
document.write("<pre>");
document.write(exploded);
document.write("</pre>");
答案 1 :(得分:1)
// A function to make inserting easier:
function insertAt(text, index, insert) {
return text.substr(0, index) + insert + text.substr(index+1); // +1 to make space go away
}
var someString = "My dog has fleas the quick brown fox jumps over the lazy dog etc.";
var currentOffset = 0; // Startposition of the pointer
var lineLength = 10; // How long you want each line to be
while( currentOffset+lineLength < someString.length ){
// Find the space in a small subset of the string, and add a newline
spacePosition = someString.substr(currentOffset,lineLength).lastIndexOf(' ')
someString = insertAt(someString, currentOffset+spacePosition, '\n')
currentOffset+= spacePosition+2; // 2 for '\n'
}
console.log('result: \n'+ someString );
表现(基于5段Lorem ipsum):
我的功能:大约1ms左右
Twister0k:大约5-7ms
当只使用小字符串时,这不会是一个问题,但如果您有大字符串,或者您经常使用此功能,则可能需要切换到此功能。
答案 2 :(得分:0)
尝试使用CSS。只需向width
元素添加一些p.overlay
,它就会自动换行文本。
您还可以使用其他css属性进行包装。
例如,使用自动换行(http://www.w3schools.com/cssref/css3_pr_word-wrap.asp)或空格(http://www.w3schools.com/cssref/pr_text_white-space.asp)。