Vue中可根據(jù)內(nèi)容自適應(yīng)改變高度的textarea文本框

如圖所示,當(dāng)textarea里的內(nèi)容超過(guò)一行后,會(huì)出現(xiàn)滾動(dòng)條并隱藏前一行的內(nèi)容,特別是在移動(dòng)端使用到textarea多行文本輸入的話,這樣顯示其實(shí)是很不友好的。所以要做一個(gè)可根據(jù)內(nèi)容改變高度的textarea的組件。

踩坑嘗試

利用rows屬性來(lái)改變高度:

W3C HTML <textarea> 標(biāo)簽

踩坑時(shí)的思路:

  • textarea加上rows屬性,并雙向綁定在datarows上。(<textarea ref="textarea" :rows="rows" v-model="value" class="textarea" ></textarea>);
  • 獲取初始頁(yè)面時(shí)候textarea的高度,這就是一行的高度oneHeight;
  • 通過(guò)vuewatch數(shù)據(jù)監(jiān)聽,當(dāng)textarea的內(nèi)容發(fā)生變化時(shí)觸發(fā),獲取textareascrollHeight,再除以oneHeight求整數(shù)然后加一就是rows的數(shù)量。

踩坑感想:
這樣做是可以實(shí)現(xiàn)當(dāng)內(nèi)容變多,行數(shù)跟著變多的情況的,但是,當(dāng)內(nèi)容變少,scrollHeight是不會(huì)減少的!所以rows也不會(huì)變,一旦被撐大,就再也縮不回去。。。。顯然,這不是我想要的效果。

正確姿勢(shì)

猛然回想起ElementUI上就有可根據(jù)內(nèi)容調(diào)整高度的組件ElementUI input!
然后就去扒源碼看看是怎么實(shí)現(xiàn)的,結(jié)果都已經(jīng)封裝好了,太棒了,直接下載來(lái)引用就行了!

餓了么組件的源碼github地址:
https://github.com/ElemeFE/element/blob/dev/packages/input/src/calcTextareaHeight.js

下面是引用了ElementUIinput組件的calcTextareaHeight方法的MyTextarea.vue

<template>
    <div class="my-textarea">
      <textarea ref="textarea" :style="{'height': height}" v-model="value" class="textarea" ></textarea>
    </div>
</template>

<script>
  import calcTextareaHeight from '@/assets/calcTextareaHeight';

  export default {
    name: 'my-textarea',
    data() {
      return {
        // textarea內(nèi)容
        value: '',
        // 動(dòng)態(tài)高度
        height: '30px'
      }
    },
    watch: {
      value() {
        this.getHeight();
      }
    },
    methods: {
      getHeight() {
        this.height = calcTextareaHeight(this.$refs.textarea, 1, null).height;
      }
    }
  }
</script>

<style scoped>
  .my-textarea .textarea {
    display: inline-block;
    width: 400px;
    /*height: 30px;*/
    line-height: 30px;
    font-size: 30px;
    resize: none;
  }
</style>
無(wú)論是單個(gè)輸入或刪減,還是一段輸入或刪減,都能立刻自適應(yīng)改變高度

完整代碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這兩天一直在下雨,不由勾起我對(duì)雨最初的感知.印象最深的還是那虞美人的那首詞,少年聽雨歌樓上,紅燭昏羅帳。壯年聽雨客...
    欺塵閱讀 280評(píng)論 2 2
  • ??本文是國(guó)外一位 40 歲“老”程序員對(duì)職業(yè)生涯的思考,他認(rèn)為從長(zhǎng)遠(yuǎn)來(lái)看,應(yīng)該多投資一些不容易過(guò)期、衰竭期較長(zhǎng)的...
    人工智能Study閱讀 386評(píng)論 0 2
  • “我要去北京!”老人垂著頭,固執(zhí)地堅(jiān)持著。 “不是不讓您去,”老人的女兒在一邊苦口婆心地勸,“現(xiàn)在天越來(lái)越冷了,您...
    夢(mèng)藤閱讀 412評(píng)論 0 0
  • 人群中茫茫大海 淹沒(méi)在不起眼的角落 拼命叫喊無(wú)人搭救 沉默中死亡 想過(guò)翻山越嶺 站立在群山之巔 卻找不到一片綠葉 ...
    閑人無(wú)稽閱讀 370評(píng)論 0 3
  • 在外面吃飯?jiān)蕉?,吃相就越重要?有一個(gè)關(guān)系很好的客戶,每次和她吃飯,她總是很照顧別人,經(jīng)常用公筷給旁邊的人夾菜,一...
    明日之星志鴻閱讀 841評(píng)論 0 2

友情鏈接更多精彩內(nèi)容