textarea如何实现高度自适应?

今天须要些一个回复评论的页面,设计师给的初始界面就是一个只有一行的框。而后当时就想这个交互该怎么实现比较好,而后想起了新浪微博的作法:点击评论,默认显示一行,当输入的文字超过一行或者输入Enter时,输入框的高度会随着改变,直到输入完毕。顿时以为这个细节作得挺不错的,能够效仿下。下面分享2种实现textarea高度自适应的作法,一种是用div来模拟textarea来实现的,用CSS控制样式,不用JS;另外一种是利用JS控制的(由于存在浏览器兼容问题,因此写起来比较麻烦);javascript

方法0:textarea高度自适应,随着内容增长高度增长

$(function(){
        $.fn.autoHeight = function(){    
        function autoHeight(elem){
            elem.style.height = 'auto';
            elem.scrollTop = 0; //防抖动
            elem.style.height = elem.scrollHeight + 'px';
        }
        this.each(function(){
            autoHeight(this);
            $(this).on('keyup', function(){
                autoHeight(this);
            });
        });     
    }                
    $('textarea[autoHeight]').autoHeight();    
})

页面中的textarea直接加属性就行html

<textarea  autoHeight="true" readonly="readonly" > </textarea>html5

pc   移动端都通过测试,没问题 放心用吧!出自:https://www.cnblogs.com/purple04551/p/8075366.htmljava

方法一:div模拟textarea文本域轻松实现高度自适应

demo演示地址:http://www.xuanfengge.com/demo/201308/textarea/demo1.html浏览器

由于textarea不支持自适应高度,就是定好高度或者是行数以后,超出部分就会显示滚动条,看起来不美观。app

而用DIV来模拟时,首先遇到的问题是:div怎么实现输入功能?测试

可能咱们仍是第一次见到这个属性contenteditable,如一个普通的block元素上加个contenteditable="true"就实现编辑,出现光标了。如ui

contenteditable属性虽是HTML5里面的内容,可是IE彷佛老早就支持此标签属性了。因此,兼容性方面仍是不用太担忧的。this

CSS代码spa

 HTML代码

CSS代码中,由于IE6不支持min/max,因此作了hack,其余的也好理解。

 

方法二:文本框textarea根据输入内容自适应高度

demo演示地址:http://www.xuanfengge.com/demo/201308/textarea/demo2.html

这个写法是用原生JS写的,考虑了不少兼容性问题,彻底和新浪微博的回复效果同样的功能。有兴趣的童鞋能够仔细分析下代码。

CSS代码

JavaScript代码

HTML代码(写在body里面的)

 

文章来源:https://www.cnblogs.com/dffy/p/6386318.html

转自:http://www.xuanfengge.com/textarea-on-how-to-achieve-a-high-degree-of-adaptive.html

 其余方法

相关文章
相关标签/搜索