░░░░░░░░░ textarea高度随内容自适应 ░░░░░░░░░

textarea高度随内容自适应,不依赖任何第三方插件,若不需要自动高度,添加 data-allow="no-allow" 即可。

1534829885100604.jpg

textarea高度自适应代码如下:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>textarea高度随内容自适应,不依赖任何第三方插件</title>
  <style>
    * {
      margin: 0;
      padding: 0
    }
    .box {
      margin: 50px auto;
      border: 1px solid #ccc;
      width: 600px;
      min-height: 300px;
      padding: 10px;
    }
    textarea{padding: 5px;width: 30%}
  </style>
</head>
<body>
  <div>
    <h2>textarea高度随内容自适应,不依赖任何第三方插件</h2>
    不需要自动高度,添加 data-allow="no-allow" 即可。
    <br><br><br>
    <textarea data-allow="no-allow"  placeholder="高度不变"></textarea>
    <textarea placeholder="高度自适应"></textarea>
    <textarea placeholder="高度自适应"></textarea>
  </div>
  <script>
    void function () {
      function DiyArea (el) {
        this.el = el || {}
        this.config = {
          el: document.querySelectorAll('textarea')
        }
        this.init()
      }
      DiyArea.prototype = {
        init: function () {
          this.bindEvent()
        },
        bindEvent: function () {
          if (!this.config.el) {
            return false
          }
          if (this.config.el[0].addEventListener) {
            for (var i = 0; i < this.config.el.length; i++) {
              if (this.config.el[i].getAttribute('data-allow') === 'no-allow') {
                continue
              }
              this.config.el[i].addEventListener('input', function (e) {
                console.log(this.style.height)
                this.style.height = 'auto'
                this.style.height = this.scrollHeight + 'px'
              })
            }
          }
        }
      }
      return new DiyArea('diy-area')
    }()
  </script>
</body>
</html>