博客
关于我
textarea文本框根据输入内容多少自适应高度
阅读量:347 次
发布时间:2019-03-04

本文共 3800 字,大约阅读时间需要 12 分钟。

效果图

è¿éåå¾çæè¿°

原生JS写的

<!DOCTYPE html><html><head>    <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">    <title>文本框根据输入内容自适应高度</title>    <style type="text/css">        h2 {            text-align: center;            margin: 50px auto;        }        #textarea {            display: block;            margin: 0 auto;            overflow: hidden;            width: 60%;            font-size: 14px;            height: 18px;            line-height: 24px;            padding: 2px;        }        textarea {            outline: 0 none;            border-color: rgba(82, 168, 236, 0.8);            box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);        }    </style></head><body><h2>文本框根据输入内容多少自适应高度</h2><textarea id="textarea" placeholder="回复内容"></textarea><script>    /**     * 文本框根据输入内容自适应高度     * @param                {HTMLElement}        输入框元素     * @param                {Number}                设置光标与输入框保持的距离(默认0)     * @param                {Number}                设置最大高度(可选)     */    var autoTextarea = function(elem, extra, maxHeight) {        extra = extra || 0;        var isFirefox = !!document.getBoxObjectFor || 'mozInnerScreenX' in window,                isOpera = !!window.opera && !!window.opera.toString().indexOf('Opera'),                addEvent = function(type, callback) {                    elem.addEventListener ?                            elem.addEventListener(type, callback, false) :                            elem.attachEvent('on' + type, callback);                },                getStyle = elem.currentStyle ? function(name) {                    var val = elem.currentStyle[name];                    if (name === 'height' && val.search(/px/i) !== 1) {                        var rect = elem.getBoundingClientRect();                        return rect.bottom - rect.top -                                parseFloat(getStyle('paddingTop')) -                                parseFloat(getStyle('paddingBottom')) + 'px';                    };                    return val;                } : function(name) {                    return getComputedStyle(elem, null)[name];                },                minHeight = parseFloat(getStyle('height'));        elem.style.resize = 'none';        var change = function() {            var scrollTop, height,                    padding = 0,                    style = elem.style;            if (elem._length === elem.value.length) return;            elem._length = elem.value.length;            if (!isFirefox && !isOpera) {                padding = parseInt(getStyle('paddingTop')) + parseInt(getStyle('paddingBottom'));            };            scrollTop = document.body.scrollTop || document.documentElement.scrollTop;            elem.style.height = minHeight + 'px';            if (elem.scrollHeight > minHeight) {                if (maxHeight && elem.scrollHeight > maxHeight) {                    height = maxHeight - padding;                    style.overflowY = 'auto';                } else {                    height = elem.scrollHeight - padding;                    style.overflowY = 'hidden';                };                style.height = height + extra + 'px';                scrollTop += parseInt(style.height) - elem.currHeight;                document.body.scrollTop = scrollTop;                document.documentElement.scrollTop = scrollTop;                elem.currHeight = parseInt(style.height);            };        };        addEvent('propertychange', change);        addEvent('input', change);        addEvent('focus', change);        change();    };</script><script>    var text = document.getElementById("textarea");    autoTextarea(text); // 调用</script><script async src="http://c.cnzz.com/core.php"></script></body></html>  

 

 

 

 

你可能感兴趣的文章
279 完全平方数(dfs)
查看>>
279 完全平方数(bfs)
查看>>
865 具有所有最深结点的最小子树(递归)
查看>>
738 单调递增的数字(找出逆序的位置)
查看>>
410 分割数组的最大值(二分查找、动态规划)
查看>>
875 爱吃香蕉的珂珂(二分查找)
查看>>
693 交替位二进制数(位运算)
查看>>
450 删除二叉搜索树中的节点(递归删除节点)
查看>>
769 最多能完成排序的块(分析)
查看>>
542 01 矩阵(单源bfs、多源bfs)
查看>>
1679 K 和数对的最大数目(使用字典对余数分组、排序 + 双指针)
查看>>
python测试代码耗时
查看>>
蓝桥杯博文链接
查看>>
桌面图标的自动排列图标
查看>>
121 买卖股票的最佳时机(寻找数组中单调递增的序列中最小数字与最大数字--单调栈)
查看>>
第十一届蓝桥杯python组第二场省赛-数字三角形
查看>>
蓝桥杯四平方和(暴力)
查看>>
递归生成重复元素的全排列
查看>>
手机号码(数位dp-dfs)
查看>>
算法训练 Anagrams问题
查看>>