textarea默认的高度不是对着内容变化,而是随着内容增多,出现了滚动条。目前的需求是实现一个能够输入的textarea,并且高度跟着内容变化。以及小程序的textarea高度随内容自动改变的实现
需求
原理:
html结构:
-
-
-
<pre class="pre"><span /><br /><br /></pre>
-
<textarea class="content" placeholder="请输入内容" oninput="changeContent()"></textarea>
-
-
样式:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
js实时把textarea内容写入到pre:
-
function changeContent(){
-
var $textarea = document.getElementsByClassName('content');
-
var $pre = document.getElementsByClassName('pre');
-
$pre[0].innerHTML = $textarea[0].value;
-
简陋的源码
-
-
-
-
-
<meta name="viewport" content="width=device-width, initial-scale=1">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
<pre class="pre"><span /><br /><br /></pre>
-
<textarea class="content" placeholder="请输入内容" oninput="changeContent()"></textarea>
-
-
-
-
function changeContent(){
-
var $textarea = document.getElementsByClassName('content');
-
var $pre = document.getElementsByClassName('pre');
-
$pre[0].innerHTML = $textarea[0].value;
-
-
-
-
使用oninput而不是onchange的原因:
小程序中的实现
<view class="text-box">
<text>{{currentInput}}</text>
<textarea class="weui-textarea" placeholder="请输入文本" bindinput="getInput" maxlength="1000"/>
</view>
.text-box{
width:100%;
position: relative;
min-height:80rpx;
margin-top:17rpx;
}
.text-box text{
display:block;
visibility:hidden;
word-break:break-all;
word-wrap:break-word;
}
.text-box .weui-textarea{
height:100%;
position: absolute;
left:0;
top:0;
overflow-y:hidden;
word-break:break-all;
word-wrap:break-word;
}
Page({
data: {
currentInput:''
},
getInput:function(e){
this.setData({
currentInput: e.detail.value
})
}
})