创造性就是发明、实验、成长、冒险、犯规、犯错和享受乐趣。 ——<玛丽·卢·库克>
原文链接:https://bdadam.com/blog/automatically-adapting-the-height-textarea.html
简介
textareas
有一个大问题:默认情况下,textareas
具有固定的高度。您可以设置rows
属性以告知应显示多少行,也可以设置其style.height
属性。但不幸的是,没有自动高度属性。
实现思路
每次更改文本后,我们都必须测量内容的高度。幸运的是有一种方法可以做到这一点。element.scrollHeight
不管可见的滚动条如何,都能为我们提供内容的高度。为了减小大小,我们每次将高度设置回零,以便scrollHeight
报告所需的最小值而不是更多。例如,当用户删除一行时。
我们还必须计算边框和轮廓的大小,以便我们不给任何机会截断内容或显示滚动条。
然后,将style.height
属性设置为计算出的高度。
为了每次都执行此操作,我们使用oninput
事件,每次文本内容更改时都会触发该事件。相反onchange
,仅当用户单击时才触发。
实现代码
1 | <textarea data-adaptheight rows="3" cols="40" placeholder="您的输入" style="padding: 16px; line-height: 1.5;"></textarea> |
实现演示
总结
每次按键都会导致重画。因为我们将文本区域的高度设置为0,然后设置为计算值。
但是,这应该可以忽略不计,因为大多数用户每秒最多只能键入几个字符。因此,它不会引起任何明显的性能缺陷。
用处
在许多情况下,这可能是有用的。在其他人中:
- 文字编辑器
- 代码编辑器
- 评论框
- …
参考
关注【公众号】,了解更多。
赞赏一下 坚持原创技术分享,您的支持将鼓励我继续创作!