vue中textarea高度的设置_Vue中可根据内容自适应改变高度的textarea文本框

如图所示,当textarea里的内容超过一行后,会出现滚动条并隐藏前一行的内容,特别是在移动端使用到textarea多行文本输入的话,这样显示其实是很不友好的。所以要做一个可根据内容改变高度的textarea的组件。

踩坑尝试

利用rows属性来改变高度:

W3C HTML 标签

踩坑时的思路:

给textarea加上rows属性,并双向绑定在data的rows上。();

获取初始页面时候textarea的高度,这就是一行的高度oneHeight;

通过vue的watch数据监听,当textarea的内容发生变化时触发,获取textarea的scrollHeight,再除以oneHeight求整数然后加一就是rows的数量。

踩坑感想:

这样做是可以实现当内容变多,行数跟着变多的情况的,但是,当内容变少,scrollHeight是不会减少的!所以rows也不会变,一旦被撑大,就再也缩不回去。。。。显然,这不是我想要的效果。

正确姿势

猛然回想起ElementUI上就有可根据内容调整高度的组件ElementUI input!

然后就去扒源码看看是怎么实现的,结果都已经封装好了,太棒了,直接下载来引用就行了!

下面是引用了ElementUI的input组件的calcTextareaHeight方法的MyTextarea.vue:

import calcTextareaHeight from '@/assets/calcTextareaHeight';

export default {

name: 'my-textarea',

data() {

return {

// textarea内容

value: '',

// 动态高度

height: '30px'

}

},

watch: {

value() {

this.getHeight();

}

},

methods: {

getHeight() {

this.height = calcTextareaHeight(this.$refs.textarea, 1, null).height;

}

}

}

.my-textarea .textarea {

display: inline-block;

width: 400px;

/*height: 30px;*/

line-height: 30px;

font-size: 30px;

resize: none;

}

无论是单个输入或删减,还是一段输入或删减,都能立刻自适应改变高度

完整代码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值