textarea高度随内容自动改变
2018-01-06 12:43
459 查看
需求
textarea默认的高度不是对着内容变化,而是随着内容增多,出现了滚动条。目前的需求是实现一个能够输入的textarea,并且高度跟着内容变化。发现了一个比较好用的插件flexText,但是这个基于jquery写的,目前的技术栈是react,所以简单看了下,然后用原生的js模拟了一个实现。
原理:
html结构:
<div class="body"> <div class="container"> <pre class="pre"><span /><br /><br /></pre> <textarea class="content" placeholder="请输入内容" oninput="changeContent()"></textarea> </div> </div>
样式:
最外层的div不需要样式,重点在里面的pre和textarea
textarea绝对定位,高度为100%,也就是高度随着外面container的高度变化。
pre是块元素,占用空间但是不可见。在textarea输入的时候,实时的把内容写入到pre中,因为pre是container的子元素,且所以外层container的高度会被pre的高度撑开。
.container{ position: relative; } .content{ position:absolute; top:0; left:0; height:100%; background: transparent; outline:0; resize:none; overflow:hidden; } .container pre { display:block; visibility:hidden; }
js实时把textarea内容写入到pre:
function changeContent(){ var $textarea = document.getElementsByClassName('content'); var $pre = document.getElementsByClassName('pre'); $pre[0].innerHTML = $textarea[0].value; }
简陋的源码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
.container{
position: relative;
}
.content{
position:absolute;
top:0;
left:0;
height:100%;
background: transparent;
outline:0;
font-size: inherit;
color: inherit;
line-height: inherit;
text-indent: inherit;
letter-spacing: inherit;
resize:none;
overflow:hidden;
}
.container pre {
display:block;
visibility:hidden;
}
</style>
</head>
<body>
<div class="body"> <div class="container"> <pre class="pre"><span /><br /><br /></pre> <textarea class="content" placeholder="请输入内容" oninput="changeContent()"></textarea> </div> </div>
<script>
function changeContent(){ var $textarea = document.getElementsByClassName('content'); var $pre = document.getElementsByClassName('pre'); $pre[0].innerHTML = $textarea[0].value; }
</script>
</body>
</html>
使用oninput而不是onchange的原因:
onkeyup使用复制粘贴时,高度不能自动改变onchange事件:在内容改变(两次内容有可能相等)且失去焦点时触发,不能实时同步
oninput事件:HTML5 的标准事件,可以用来检测元素通过用户界面发生的内容变化,在内容修改后立即被触发
相关文章推荐
- 关于textarea根据文本内容自动改变高度
- UILable根据内容自动换行,动态改变高度
- HTML的TextArea标记跟随文本内容自动设置高度
- 让文本框textarea自动适应内容的高度
- 实现 textarea随内容高度自动变化
- textarea高度随内容自动伸缩
- 让文本框textarea自动适应内容的高度
- iframe 自适应高度,更改内容时iframe高度怎么根据新的内容高度自动改变
- Jquery实现<textarea>根据内容自动改变大小
- js控制textarea输入框根据内容自动适应高度
- Jquery实现 TextArea 文本框根据输入内容自动适应高度
- HTML的TextArea标记跟随文本内容自动设置高度
- jquery mobaile中textarea根据内容自动调整高度
- textarea自动适应内容的高度
- uilable根据内容多少自动改变高度
- Extjs4 textarea文本框高度随内容自动增长
- HTML的TextArea标记跟随文本内容自动设置高度
- UILable根据内容多少自动改变高度
- 【记录】用Javascript实现文本框textarea高度随内容自动适应增长收缩
- 让文本框textarea自动适应内容的高度