文本框根据输入内容自适应高度的代码


Posted in Javascript onOctober 24, 2011

其实现代浏览器大多都支持文本框尺寸调节功能,绝大多数情况下却没有自动适应来得爽快,在网络上发现一方法比较简单的实现文本框高度自适应,于是封装了这个函数,准备以后应用到项目中。
源代码:
23:03文章更新:
感谢alucelx同学再次给力的帮助,大大简化了方法,更新代码为0.2版本,同时解决了兼容Opera浏览器,至此全兼容IE6+与现代浏览器!
在线演示: http://demo.3water.com/js/2011/autoArea/index.htm
autoTextarea.js

/** 
* 文本框根据输入内容自适应高度 
* @author tang bin 
* @version 0.3 
* @see http://www.planeart.cn/?p=1489 
* @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(); 
};

测试代码:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>文本框根据输入内容自适应高度</title>
<style type="text/css">
#textarea { font: 1.4em/1.8em Arial; overflow: hidden; width: 550px; height: 6em; padding:10px; }
</style>
<script src="autoTextarea.js"></script>
</head>
<body style="background:#FBFCFD url(http://goo.gl/kLsZX);">
<textarea id="textarea"></textarea>
<script>
var text = document.getElementById("textarea"),
tip = '想写点什么..';
autoTextarea(text);// 调用
text.value = tip;
text.onfocus = function () {
if (text.value === tip) text.value = '';
};
text.onblur = function () {
if (text.value === '') text.value = tip;
};
</script>
</body>
</html>
Javascript 相关文章推荐
JavaScript 使用技巧精萃(.net html
Apr 25 Javascript
JavaScript中如何通过arguments对象实现对象的重载
May 12 Javascript
百度地图自定义控件分享
Mar 04 Javascript
深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解
Mar 05 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
Sep 01 Javascript
angular实现spa单页面应用实例
Jul 10 Javascript
Node实战之不同环境下配置文件使用教程
Jan 02 Javascript
vue-scroller记录滚动位置的示例代码
Jan 17 Javascript
详解操作虚拟dom模拟react视图渲染
Jul 25 Javascript
JS正则表达式常见函数与用法小结
Apr 13 Javascript
vue+elementUI(el-upload)图片压缩,默认同比例压缩操作
Aug 10 Javascript
利用js canvas实现五子棋游戏
Oct 11 Javascript
js创建数据共享接口——简化框架之间相互传值
Oct 23 #Javascript
javascript模版引擎-tmpl的bug修复与性能优化分析
Oct 23 #Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
Oct 23 #Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
Oct 23 #Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
Oct 22 #Javascript
js两行代码按指定格式输出日期时间
Oct 21 #Javascript
jQuery中live方法的重复绑定说明
Oct 21 #Javascript
You might like
php获得文件扩展名三法
2006/11/25 PHP
PHP如何得到当前页和上一页的地址?
2006/11/27 PHP
discuz的php防止sql注入函数
2011/01/17 PHP
php中通过虚代理实现延迟加载的实现代码
2011/06/10 PHP
php缩放图片(根据宽高的等比例缩放)实例介绍
2013/06/09 PHP
php对数组内元素进行随机调换的方法
2015/05/12 PHP
CodeIgniter多语言实现方法详解
2016/01/20 PHP
Yii全局函数用法示例
2017/01/22 PHP
jquery中获得$.ajax()事件返回的值并添加事件的方法
2010/04/15 Javascript
jcarousellite.js 基于Jquery的图片无缝滚动插件
2010/12/30 Javascript
JQuery的ready函数与JS的onload的区别详解
2013/11/21 Javascript
js实现省市联动效果的简单实例
2014/02/10 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/06/05 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
jQuery中not()方法用法实例
2015/01/06 Javascript
jQuery插件MixItUp实现动画过滤和排序
2015/04/12 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
2016/05/18 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
关于vue-router的beforeEach无限循环的问题解决
2017/09/09 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
模块化react-router配置方法详解
2019/06/03 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
布同自制Python函数帮助查询小工具
2011/03/13 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
python 操作mysql数据中fetchone()和fetchall()方式
2020/05/15 Python
django 外键创建注意事项说明
2020/05/20 Python
HTML5 用动画的表现形式装载图像
2016/03/08 HTML / CSS
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
世界上最大的隐形眼镜商店:1-800 Contacts
2018/11/03 全球购物
如何设置Java的运行环境
2013/04/05 面试题
干部竞争上岗演讲稿
2014/09/11 职场文书
会计岗位职责
2015/02/03 职场文书
2019暑期安全倡议书!
2019/06/27 职场文书
pytorch交叉熵损失函数的weight参数的使用
2021/05/24 Python