textarea高度自适应 && 元素属性contenteditable介绍

9 篇文章 1 订阅
3 篇文章 0 订阅

近期实现的一个笔录页面如上图所示,考虑到笔录内容肯定会超出一行,所以我选择了使用textareas文本输入框,问题在于textarea不支持自适应高度,就是定好高度或者是行数之后,超出部分就会显示滚动条,看起来不美观。

下面分享2种实现textarea高度自适应的做法,一种是利用JS控制textarea的高度,另一种是用div元素来模拟textarea

一、textarea高度自适应

  一个有最小高度(设置其rows属性或min-height)的 textarea 标签,当文字增多出现滚动条时,将它的滚动高度scrollHeight赋给height,以达到textarea高度自适应效果

【1】原生JS

<body>
  <textarea name="" id="record" cols="60" rows="2"></textarea>
  <script>
    document.querySelector('#record').addEventListener('input', function () {
      this.style.height = 'auto';
      this.style.height = this.scrollHeight + 'px';
    })
  </script>
</body>

【2】JQuery

<body>
  <textarea name="" id="record" cols="60" rows="2"></textarea>
  <script>
    $('#record').on('input', function () {
      $(this).css('height', 'auto').css('height', this.scrollHeight + 'px');
    });
  </script>
</body>

【3】Vue

<body>
  <textarea cols="60" rows="2" v-model="recode" @input="handleInput"></textarea>
  <script>
    export default {
      data() {
        return {
          recode: ''
        }
      },
      methods: {
        handleInput(e) {
          e.target.style.height = 'auto';
          e.target.style.height = e.target.scrollHeight + 'px';
        }
      },
    }
  </script>
</body>

二、contenteditable介绍

contenteditable是HTML5新增的全局属性,有true和false两个属性值。用来指定元素内容是否可编辑。

下面是一个简单的示例,创建一个"contenteditable"属性为"true"的div元素,用户就可以编辑其内容了。div元素超出指定width会自动换行,因此不用设置高度自适应

  <div contenteditable="true">
      用户可以在此编辑文本
  </div>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Demi

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值