用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实现的像java、c#之类的sleep暂停的函数代码
Mar 04 Javascript
document.documentElement的一些使用技巧
Apr 18 Javascript
Jquery实现自定义弹窗示例
Mar 12 Javascript
javascript获取四位数字或者字母的随机数
Jan 09 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
Apr 14 Javascript
jQuery常用样式操作实例分析(获取、设置、追加、删除、判断等)
Sep 08 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
Jul 05 Javascript
bootstrap响应式工具使用详解
Nov 29 Javascript
JS实现键值对遍历json数组功能示例
May 30 Javascript
node使用request请求的方法
Dec 20 Javascript
javascript执行上下文、变量对象实例分析
Apr 25 Javascript
原生JS实现分页
Apr 19 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网站来路获取代码(针对搜索引擎)
2010/06/08 PHP
fleaphp常用方法分页之Pager使用方法
2011/04/23 PHP
PHP写日志的实现方法
2014/11/05 PHP
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
2016/05/20 PHP
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
jQuery中与toggleClass等价的程序段 以及未来学习的方向
2010/03/18 Javascript
基于JQuery 的消息提示框效果代码
2011/07/31 Javascript
jQuery语法总结和注意事项小结
2012/11/11 Javascript
非html5实现js版弹球游戏示例代码
2013/09/22 Javascript
javascript打开word文档的方法
2014/04/16 Javascript
JavaScript常用脚本汇总(一)
2015/03/04 Javascript
Linux CentOS系统下安装node.js与express的方法
2017/04/01 Javascript
详解AngularJs路由之Ui-router-resolve(预加载)
2017/06/13 Javascript
vue 中Virtual Dom被创建的方法
2019/04/15 Javascript
微信小程序云开发之使用云函数
2019/05/17 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
2019/06/19 Javascript
windows下python模拟鼠标点击和键盘输示例
2014/02/28 Python
Python中请使用isinstance()判断变量类型
2014/08/25 Python
Python处理RSS、ATOM模块FEEDPARSER介绍
2015/02/18 Python
Python字符串处理实现单词反转
2017/06/14 Python
Python实现复杂对象转JSON的方法示例
2017/06/22 Python
python爬虫之模拟登陆csdn的实例代码
2018/05/18 Python
python 字符串只保留汉字的方法
2018/11/16 Python
python已协程方式处理任务实现过程
2019/12/27 Python
python实现人机五子棋
2020/03/25 Python
Python BeautifulReport可视化报告代码实例
2020/04/13 Python
Python实现疫情通定时自动填写功能(附代码)
2020/05/27 Python
python和node.js生成当前时间戳的示例
2020/09/29 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
详解Python GUI编程之PyQt5入门到实战
2020/12/10 Python
机电一体化求职信
2014/03/10 职场文书
酒店管理求职信
2014/06/09 职场文书
2016春节慰问信范文
2015/03/25 职场文书
四群教育工作总结
2015/08/10 职场文书
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL