用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 相关文章推荐
非常漂亮的JS+CSS图片幻灯切换特效
Nov 20 Javascript
jquery获取html元素的绝对位置和相对位置的方法
Jun 20 Javascript
AngularJS 中文API参考手册
Jul 28 Javascript
原生javascript实现图片放大镜效果
Jan 18 Javascript
bootstrap table动态加载数据示例代码
Mar 25 Javascript
详解webpack2+React 实例demo
Sep 11 Javascript
如何将HTML字符转换为DOM节点并动态添加到文档中详解
Aug 19 Javascript
layui实现数据表格点击搜索功能
Mar 26 Javascript
微信公众号平台接口开发 获取access_token过程解析
Aug 14 Javascript
在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法
Sep 10 Javascript
解决layui弹出层layer的area过大被遮挡的问题
Sep 21 Javascript
JS数组splice操作实例分析
Oct 12 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
使用Thinkphp框架开发移动端接口
2015/08/05 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
PHP自动识别当前使用移动终端
2018/05/21 PHP
js中的值类型和引用类型小结 文字说明与实例
2010/12/12 Javascript
为JavaScript类型增加方法的实现代码(增加功能)
2011/12/29 Javascript
jquery点击页面任何区域实现鼠标焦点十字效果
2013/06/21 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
在Javascript中处理数组之toSource()方法的使用
2015/06/09 Javascript
基于jQuery+PHP+Mysql实现在线拍照和在线浏览照片
2015/09/06 Javascript
JS基于VML技术实现的五角星礼花效果代码
2015/10/26 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
2016/11/09 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
JavaScript时间日期操作实例小结【5个示例】
2018/12/22 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
解决layUI的页面显示不全的问题
2019/09/20 Javascript
node.js使用fs读取文件出错的解决方案
2019/10/23 Javascript
用js限制网页只在微信浏览器中打开(或者只能手机端访问)
2020/12/24 Javascript
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
python分布式环境下的限流器的示例
2017/10/26 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
PYTHON发送邮件YAGMAIL的简单实现解析
2019/10/28 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
Python实现AES加密,解密的两种方法
2020/10/03 Python
用python对oracle进行简单性能测试
2020/12/05 Python
css3 column实现卡片瀑布流布局的示例代码
2018/06/22 HTML / CSS
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
Chinti & Parker官网:奢华羊绒女装和创新针织设计
2021/01/01 全球购物
美德少年事迹材料
2014/01/23 职场文书
端午节粽子促销活动方案
2014/02/02 职场文书
科技节口号
2014/06/19 职场文书
高中生第一学年自我鉴定
2014/09/12 职场文书
夫妻分居协议书范本
2014/11/28 职场文书
团代会开幕词
2015/01/28 职场文书
《乘法分配律》教学反思
2016/02/24 职场文书