在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
阅读全文你将获得以下解决方案。
以下实例代码执行环境为Chrome80 方案一 HTML5 Textarea 元素 1. 自动获得焦点 点击编辑自动获得焦点后光标跳转到了最前面, 查文档 MDN, 那么我们只要做到 edit.addEventListener("click", function() { txt.classList.add("hidden"); document.body.insertBefore(textarea, edit); textarea.innerHTML = "这是需要编辑的信息"; textarea.focus(); // textarea.selectionEnd = textarea.innerHTML.length; textarea.setSelectionRange( textarea.innerHTML.length, textarea.innerHTML.length ); }); 2. 自适应高度 当不设置高度时换行会出现滚动条,所以只要让 textarea.addEventListener("input", function() { this.style.height = `${this.scrollHeight}px`; }); 为什么每次输入都会使得高度增加(每次增加4px),经过测试 <style> textarea { padding: 0; } </style> <textarea></textarea> <script> const textarea = document.createElement("textarea"); textarea.addEventListener("input", function(e) { this.style.height = `${this.scrollHeight}px`; }); </script> 为什么去掉padding值,输入后高度就不增加了?(未找到合理的解释,欢迎留言讨论解答) 但是删除文本的情况下 textarea.addEventListener("input", function(e) { this.style.height = "inherit"; this.style.height = `${this.scrollHeight}px`; }); 到此高度自适应输入内容完成,但是每次换行的闪动很难受, textarea { overflow: hidden; // 防止换行出现滚动条闪动 padding: 5px 10px; box-sizing: border-box; transition: all 0.2s linear; } 结果 textarea.addEventListener("keyup", function(e) { if (e.keyCode === 8) { this.style.height = "inherit"; this.style.height = `${this.scrollHeight}px`; } else { this.style.height = `${this.scrollHeight}px`; } }); 3. 支持粘贴文本,图片等 textarea只能输入文本,无法实现粘贴图片。 textarea.addEventListener( "paste", function(e) { e.preventDefault(); console.log( "paste", e.clipboardData.items, e.clipboardData.types, e.clipboardData.getData("text/html"), e.clipboardData.getData("text/plain"), e.clipboardData.getData("text/Files") ); }, false ); 方案二
1. 自动获得焦点 编辑 edit.addEventListener("click", () => { textarea.setAttribute("contenteditable", true); textarea.focus(); const range = document.createRange(); // range 包含的内容 range.selectNodeContents(textarea); // range.setStart(textarea.firstChild, 0); // range.setStart(textarea.lastChild, textarea.innerHTML.length); // 起始位置是否相同 range.collapse(false); const sel = window.getSelection(); // 将所有的区域都从选区中移除。 sel.removeAllRanges(); // 一个区域(Range)对象将被加入选区。 sel.addRange(range); }); 2. 自适应高度
3. 粘贴图片, 文本等 textarea.addEventListener("paste", function(e) { e.preventDefault(); const clipboardData = e.clipboardData || e.originalEvent.clipboardData; // 获取纯文本 let text = clipboardData.getData("text/plain"); let file = clipboardData.getData("text/plain"); // console.log(clipboardData.items, clipboardData.getData("text/Files")); // 插入img,可以做一些上传图片的一些操作 insertImg(clipboardData); // 只输入纯文本 document.execCommand("insertText", false, text); }); 此方法可以限定只能上传文本或者图片。 欢迎留言讨论其他 到此这篇关于HTML5 textarea高度自适应的两种方案的文章就介绍到这了,更多相关textarea高度自适应内容请搜索极客世界以前的文章或继续浏览下面的相关文章,希望大家以后多多支持极客世界! |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论