返回顶部
首页 > 资讯 > 精选 >怎么在HTML5中使用 textarea实现高度自适应
  • 758
分享到

怎么在HTML5中使用 textarea实现高度自适应

2023-06-09 11:06:09 758人浏览 八月长安
摘要

今天就跟大家聊聊有关怎么在HTML5中使用 textarea实现高度自适应,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。方案一html5 Textarea 元素1. 自动获得焦点点击

今天就跟大家聊聊有关怎么在HTML5中使用 textarea实现高度自适应,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

方案一

html5 Textarea 元素

1. 自动获得焦点

点击编辑自动获得焦点后光标跳转到了最前面,why?

怎么在HTML5中使用 textarea实现高度自适应

查文档 MDN,textarea元素存在selectionEndselectionStart的属性用来表示选中的文本开始位置和结束位置,DOM接口实例是 HTMLTextAreaElement, 它具有 setSelectionRange 方法,用来选中输入框中的文本,用法:TextAreaElement.setSelectionRange(selectionStart, selectionEnd, [optional] selectionDirection);

那么我们只要做到selectionStart === selectionEnd === value.length , 这样光标就选中到最末尾。

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滚动条消失,让其height = scrollHieght, 那么如何监听textarea的变化,则需要input事件,让textarea高度动态等于它的scrollHeight即可,代码如下:

textarea.addEventListener("input", function() {    this.style.height = `${this.scrollHeight}px`;});

怎么在HTML5中使用 textarea实现高度自适应

为什么每次输入都会使得高度增加(每次增加4px),经过测试Safari同样也是这个效果,Firefox符合预期高度不异常增加,查看Chrome控制台发现textarea内置了很多样式,尝试将去掉padding后,可以正常随着内容增加高度自适应了。

<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值,输入后高度就不增加了?(未找到合理的解释,欢迎留言讨论解答)

但是删除文本的情况下height并未能自动缩放,分析原因, 当删除文本换行的时候scrollHeight的大小并未发生改变,scrollHeight作为只读属性( MDN-文档),如何让scrollHeight高度重新计算哪?只有改变高度,于是:

textarea.addEventListener("input", function(e) {  this.style.height = "inherit";  this.style.height = `${this.scrollHeight}px`;});

到此高度自适应输入内容完成,但是每次换行的闪动很难受,transition走一波,

textarea {  overflow: hidden;  // 防止换行出现滚动条闪动  padding: 5px 10px;  box-sizing: border-box;  transition: all 0.2s linear;}

结果transition并没效果,原因height初始值或者参考值必须为数值过渡动画才会生效,height设置为auto或者inherit动画不会生效, 所以折中的办法就是当删除的时候重新重置高度,输入时不需要重置,这样输入时动画生效, 删除没有动画, 暂时没想到更好的办法。

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);

方案二

div contenteditable 替换textarea

1. 自动获得焦点

编辑div contenteditabletrue,然后利用RangeSelection 光标移动到最后的效果。

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. 自适应高度

div contenteditable 天然支持根据输入来自适应高度。

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实现高度自适应有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

--结束END--

本文标题: 怎么在HTML5中使用 textarea实现高度自适应

本文链接: https://lsjlt.com/news/255756.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么在HTML5中使用 textarea实现高度自适应
    今天就跟大家聊聊有关怎么在HTML5中使用 textarea实现高度自适应,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。方案一HTML5 Textarea 元素1. 自动获得焦点点击...
    99+
    2023-06-09
  • Vue中textarea自适应高度方案怎么实现
    本篇内容介绍了“Vue中textarea自适应高度方案怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!隐藏的问题抛开原生JS,框架的大...
    99+
    2023-06-22
  • 怎么实现一个自适应高度的textarea
    今天就跟大家聊聊有关怎么实现一个自适应高度的textarea,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。方法 HTML结构:<div id="contai...
    99+
    2023-06-09
  • Vue中textarea自适应高度方案的实现
    目录隐藏的问题解决自适应高度的方案先给方案,Vue栈有需求的同学可以直接下载vue-awesome-textarea 隐藏的问题 抛开原生JS,框架的大部分UI库都支持自适应text...
    99+
    2024-04-02
  • CSS中textarea高度自适应问题怎么解决
    这篇文章主要介绍“CSS中textarea高度自适应问题怎么解决”,在日常操作中,相信很多人在CSS中textarea高度自适应问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2024-04-02
  • 使用postMessage怎么实现iframe自适应高度
    这篇文章将为大家详细讲解有关使用postMessage怎么实现iframe自适应高度,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。index.html :<!DOCTYPE ...
    99+
    2023-06-09
  • css textarea高度自适应无滚动条怎么设置
    要实现textarea高度自适应且无滚动条,可以通过以下CSS样式设置:```csstextarea {resize: none; ...
    99+
    2023-09-20
    css
  • css高度自适应怎么实现
    这篇文章跟大家分析一下“css高度自适应怎么实现”。内容详细易懂,对“css高度自适应怎么实现”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。...
    99+
    2024-04-02
  • css怎么实现高度自适应
    本篇内容主要讲解“css怎么实现高度自适应”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“css怎么实现高度自适应”吧!在写css静态页面的时候让Html的高度自适应屏幕高度是一个常见的需求,比如...
    99+
    2023-06-20
  • iframe窗口高度自适应怎么实现
    要实现iframe窗口的高度自适应,可以使用以下方法:1. 使用JavaScript动态调整iframe的高度。在iframe的内容...
    99+
    2023-08-11
    iframe
  • 使用RecyclerView实现瀑布流高度自适应
    使用RecyclerView实现的瀑布流高度自适应,供大家参考,具体内容如下 背景:使用时在RecyclerView外嵌套了自定义的ScrollView,需要让RecyclerVie...
    99+
    2024-04-02
  • 怎么实现图片高度随宽度自适应
    本篇文章为大家展示了怎么实现图片高度随宽度自适应,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、可以使用js判断图片的宽度得到具体数值之后,再来利用js设置图片的高度(这里就不具体为大家细说了)。...
    99+
    2023-06-09
  • 使用html5怎么实现移动端自适应布局
    这篇文章给大家介绍使用html5怎么实现移动端自适应布局,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。使用媒体查询,下面制定了几种适应方式,例如第一个表示屏幕宽度在320px-360px之间的,html字体大小适配为1...
    99+
    2023-06-09
  • css怎么让高度自适应
    这篇文章主要介绍了css怎么让高度自适应,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 css让高度自适应的方法...
    99+
    2024-04-02
  • css宽度自适应怎么实现
    这篇文章将为大家详细讲解有关css宽度自适应怎么实现,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。   我们经常会看到这样的页面,左侧(或者右侧)为固定的导航或者菜单栏...
    99+
    2024-04-02
  • echarts怎么实现自适应宽度
    要实现Echarts图表的自适应宽度,你可以使用以下方法: 使用CSS样式控制容器的宽度:将Echarts绘图容器的宽度设置为一个...
    99+
    2023-10-21
    echarts
  • 怎么在CSS3 中使用@media 实现网页自适应
    这期内容当中小编将会给大家带来有关怎么在CSS3 中使用@media 实现网页自适应,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、CSS2 中的@mediacss2里面虽然支持@media属性,但是能...
    99+
    2023-06-08
  • CSS怎么让iframe实现自适应高度的效果
    小编给大家分享一下CSS怎么让iframe实现自适应高度的效果,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!   iframe自适应高度   出于演示目的,本文将使用视频嵌入我们的if...
    99+
    2024-04-02
  • 微信小程序怎么实现swiper高度自适应
    本篇内容主要讲解“微信小程序怎么实现swiper高度自适应 ”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微信小程序怎么实现swiper高度自适应 ”吧!要求:swiper高度自适应wxml&l...
    99+
    2023-06-26
  • HTML中怎么设置Iframe自适应高度
    这篇“HTML中怎么设置Iframe自适应高度”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作