我正在尝试为 Firefox 和 Chrome 创建 jQuery 插件,这将使textarea
高度和宽度都自动增长。
这就是我所做的。
HTML:
<div class="textbox">
<textarea>Some Text</textarea>
</div>
CSS:
body, html {
height: 100%;
width: 100%;
padding: 0;
margin: 0;
}
.textbox {
position: absolute;
border: 4px dashed #CCCCCC;
min-width: 30px;
padding: 8px;
}
.textbox textarea {
background: transparent;
padding: 0;
margin: 0;
resize: none;
font-family: Arial, sans-serif;
font-size: 60px;
overflow: hidden;
width: 100%;
height: 100%;
border: none;
white-space: nowrap;
}
.hiddendiv {
display: none;
white-space: pre-wrap;
word-wrap: break-word;
overflow-wrap: break-word;
}
JS:
$(function() {
$.fn.textbox = function(options) {
options = options || {};
var maxWidth = options.maxWidth || $(window).width(),
maxHeight = options.maxHeight || $(window).height();
this.each(function() {
var elem = $(this),
clone = $("<div class='hiddendiv'></div>").appendTo("body"),
textarea = elem.find("textarea"),
content = "";
function setMaxSize() {
var widthSpace = elem.outerWidth(true) - elem.width();
var heightSpace = elem.outerHeight(true) - elem.height();
var newMax = {
"max-width": maxWidth - widthSpace,
"max-height": maxHeight - heightSpace
};
elem.css(newMax);
clone.css(newMax);
}
function adjust() {
clone.css({
"font-family": textarea.css("font-family"),
"font-size": textarea.css("font-size")
});
content = textarea.val().replace(/\n/g, '<br> ');
if (content === "") {
content = " ";
}
clone.html(content);
elem.css({
height: clone.height(),
width: clone.width() + 5
});
}
textarea.on("keyup", adjust);
setMaxSize();
adjust();
});
};
$(".textbox").textbox();
});
我有几个问题:
- 每当我输入一个字母并展开框时,只有在 Firefox 中我才会奇怪地闪烁。我怎样才能摆脱这种眨眼?
- 在 Chrome 中,当我键入一个字母时,第一个字母会向后移动,然后返回到它的位置。我怎样才能防止这种情况?
- 在 Chrome 中,每当我输入一个长词时,例如“Sdfsdfsdfwejhrkjsdhfsdf”,文本在达到最大宽度时不会换行,而是会出现一个新行。我该如何解决这种行为?