用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系列之数据类型 字符串
Jun 08 Javascript
JavaScript面向对象设计二 构造函数模式
Dec 20 Javascript
JQuery设置和去除disabled属性的5种方法总结
May 16 Javascript
jquery mobile页面跳转后样式丢失js失效的解决方法
Sep 06 Javascript
JS+CSS实现的拖动分页效果实例
May 11 Javascript
jQuery中extend函数详解
Jul 13 Javascript
详解JavaScript的回调函数
Nov 20 Javascript
深入理解ECMAScript的几个关键语句
Jun 01 Javascript
node.js 动态执行脚本
Jun 02 Javascript
Vue Cli与BootStrap结合实现表格分页功能
Aug 18 Javascript
sublime text配置node.js调试(图文教程)
Nov 23 Javascript
关于 angularJS的一些用法
Nov 29 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
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
php根据日期或时间戳获取星座信息和生肖等信息
2015/10/20 PHP
php实现微信发红包
2015/12/05 PHP
php实现每日签到功能
2018/11/29 PHP
jQuery控制Div拖拽效果完整实例分析
2015/04/15 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
2015/08/31 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
2015/10/24 Javascript
js随机生成26个大小写字母
2016/02/12 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
2016/06/12 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
2017/04/06 Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
2017/06/29 jQuery
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
JavaScript实现矩形块大小任意缩放
2020/08/25 Javascript
[07:59]2014DOTA2叨叨刀塔 林熊猫称被邀请赛现场盛况震撼
2014/07/21 DOTA
[04:19]DOTA2亚洲邀请赛 现场花絮
2015/03/11 DOTA
python实现的文件同步服务器实例
2015/06/02 Python
总结python爬虫抓站的实用技巧
2016/08/09 Python
Python序列循环移位的3种方法推荐
2018/04/09 Python
Python实现的求解最大公约数算法示例
2018/05/03 Python
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
Python爬虫学习之获取指定网页源码
2019/07/30 Python
python实现大量图片重命名
2020/03/23 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
如何查找网页漏洞
2016/06/22 面试题
残疾人小组计划书
2014/04/27 职场文书
博士生导师推荐信
2014/07/08 职场文书
代办委托书怎么写
2014/08/01 职场文书
党员对照检查材料思想汇报(党的群众路线)
2014/09/24 职场文书
大学生就业推荐表自我评价
2015/03/02 职场文书
信息技术远程培训心得体会
2016/01/09 职场文书
Nginx tp3.2.3 404问题解决方案
2021/03/31 Servers
优化Mysql查询的示例
2022/04/26 MySQL