文本区域textarea框根据输入内容自适应高度

前端APP 投稿 11400 0 评论

文本区域textarea框根据输入内容自适应高度

在网络上发现一方法比较简单的实现文本框高度自适应,于是封装了这个函数,全兼容IE6+与现代浏览器!具体函数代码如下:


/**
 * 文本框根据输入内容自适应高度
 * @author		tang bin
 * @version		0.3
 * @see			https://www.feishuai.vip/article-9-32.html
 * @param		{HTMLElement}	输入框元素
 * @param		{Number}		设置光标与输入框保持的距离(默认20
 * @param		{Number}		设置最大高度(可选
 */
var autoTextarea = function (elem, extra, maxHeight {
	extra = extra || 20;
	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.maxHeight = 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(;
};

调用方法如下(textarea_id为textarea的id值):


autoTextarea(document.getElementById('textarea_id';

另外一种简易的实现方法:


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>TEXTAREA自适应文字行数的多少</title>
</head>
<body>
<textarea rows="6" name="s1" cols="27" onpropertychange="this.style.posHeight=this.scrollHeight"></textarea>
</body>
</html>

编程笔记 » 文本区域textarea框根据输入内容自适应高度

赞同 (63) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽