用js模拟JQuery的show与hide动画函数代码


Posted in Javascript onSeptember 20, 2010
//根据ID返回dom元素 
var $ = function(id){return document.getElementById(id);} 
//返回dom元素的当前某css值 
var getCss = function(obj,name){ 
//ie 
if(obj.currentStyle) { 
return obj.currentStyle[name]; 
} 
//ff 
else { 
var style = document.defaultView.getComputedStyle(obj,null); 
return style[name]; 
} 
}

Hide函数:
var hide = function(obj,speed,fn){ 
obj = $(obj); if (!speed) { 
obj.style.display = 'none'; 
return; 
} 
else{ 
speed = speed==='fast'?20:speed==='normal'?30:50; 
obj.style.overflow = 'hidden'; 
} 
//获取dom的宽与高 
var oWidth = getCss(obj,'width'), oHeight = getCss(obj,'height'); 
//每次dom的递减数(等比例) 
var wcut = 10*(+oWidth.replace('px','') / +oHeight.replace('px','')),hcut = 10; 
//处理动画函数 
var process = function(width,height){ 
width = +width-wcut>0?+width-wcut:0; 
height = +height-hcut>0?+width-hcut:0; 
//判断是否减完了 
if(width !== 0 || height !== 0) { 
obj.style.width = width+'px'; 
obj.style.height = height+'px'; 
setTimeout(function(){process(width,height);},speed); 
} 
else { 
//减完后,设置属性为隐藏以及原本dom的宽与高 
obj.style.display = 'none'; 
obj.style.width = oWidth; 
obj.style.height = oHeight; 
if(fn)fn.call(obj); 
} 
} 
process(oWidth.replace('px',''),oHeight.replace('px','')); 
}

Show函数与Hide函数类似,只是思路相反而已
var show = function(obj,speed,fn){ obj = $(obj); 
if (!speed) { 
obj.style.display = 'block'; 
return; 
} 
else{ 
speed = speed==='fast'?20:speed==='normal'?30:50; 
obj.style.overflow = 'hidden'; 
} 
var oWidth = getCss(obj,'width').replace('px',''), oHeight = getCss(obj,'height').replace('px',''); 
var wadd = 10*(+oWidth / +oHeight),hadd = 10; 
obj.style.width = 0+'px'; 
obj.style.height = 0+'px'; 
obj.style.display = 'block'; 
var process = function(width,height){ 
width = +oWidth-width<wadd?+oWidth:wadd+width; 
height = +oHeight-height<hadd?oHeight:hadd+height; 
if(width !== +oWidth || height !== +oHeight) { 
obj.style.width = width+'px'; 
obj.style.height = height+'px'; 
setTimeout(function(){process(width,height);},speed); 
} 
else { 
obj.style.width = oWidth+'px'; 
obj.style.height = oHeight+'px'; 
if(fn)fn.call(obj); 
} 
} 
process(0,0); 
}

调用方式如:

hide('a','normal',function(){ 
show('a','normal'); 
});

呃。。。感觉写得好冗余,但不知要如何再优化,希望有高手能写个精简些的。。。

Javascript 相关文章推荐
javascript 弹出层组件(升级版)
May 12 Javascript
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
Jan 10 Javascript
jQuery设置div一直在页面顶部显示的方法
Oct 24 Javascript
js改变Iframe中Src的方法
May 05 Javascript
JS判断图片是否加载完成方法汇总(最新版)
May 13 Javascript
JS获取一个未知DIV高度的方法
Aug 09 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
Jan 19 Javascript
微信小程序开发animation心跳动画效果
Aug 16 Javascript
浅谈如何通过node.js对数据进行MD5加密
May 16 Javascript
koa源码中promise的解读
Nov 13 Javascript
element el-table表格的二次封装实现(附表格高度自适应)
Jan 19 Javascript
javascript实现下拉菜单效果
Feb 09 Javascript
通过DOM脚本去设置样式信息
Sep 19 #Javascript
javscript对象原型的一些看法
Sep 19 #Javascript
Ext 今日学习总结
Sep 19 #Javascript
JS面向对象编程 for Cookie
Sep 19 #Javascript
网络之美 JavaScript中Get和Set访问器的实现代码
Sep 19 #Javascript
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
Sep 19 #Javascript
jquery异步循环获取功能实现代码
Sep 19 #Javascript
You might like
PHP的面试题集
2006/11/19 PHP
深入php var_dump()函数的详解
2013/06/05 PHP
探讨PHP中OO之静态关键字以及类常量的详解
2013/06/07 PHP
深入PHP autoload机制的详解
2013/06/09 PHP
php中$_GET与$_POST过滤sql注入的方法
2014/11/03 PHP
Symfony页面的基本创建实例详解
2015/01/26 PHP
PHP实现将textarea的值根据回车换行拆分至数组
2015/06/10 PHP
PHP curl使用实例
2015/07/02 PHP
为你总结一些php信息函数
2015/10/21 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
nodejs通过phantomjs实现下载网页
2015/05/04 NodeJs
JSON字符串和对象之间的转换详解
2015/05/26 Javascript
JavaScript时间戳与时间日期间相互转换
2017/12/11 Javascript
react 父子组件之间通讯props
2018/09/08 Javascript
在vue中多次调用同一个定义全局变量的实例
2018/09/25 Javascript
Java Varargs 可变参数用法详解
2020/01/28 Javascript
ES6 Symbol在对象中的作用实例分析
2020/06/06 Javascript
vue cli4.0项目引入typescript的方法
2020/07/17 Javascript
[04:27]2014DOTA2国际邀请赛 NAVI战队官方纪录片
2014/07/21 DOTA
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
2015/04/25 Python
Python多进程并发(multiprocessing)用法实例详解
2015/06/02 Python
Python列表推导式与生成器用法分析
2018/08/02 Python
python实现图片二值化及灰度处理方式
2019/12/07 Python
如何查看Django ORM执行的SQL语句的实现
2020/04/20 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
中国首家奢侈品O2O网购平台:第五大道奢侈品网
2017/12/14 全球购物
opencv实现图像平移效果
2021/03/24 Python
有个性的自我评价范文
2013/11/15 职场文书
超市业务员岗位职责
2013/12/05 职场文书
高三生物教学反思
2014/01/25 职场文书
优秀求职信
2014/05/29 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
乐山大佛导游词
2015/02/02 职场文书
清明节主题班会
2015/08/14 职场文书