用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 相关文章推荐
关于firefox的ElementTraversal 接口 使用说明
Nov 11 Javascript
javascript object array方法使用详解
Dec 03 Javascript
jquery中focus()函数实现当对象获得焦点后自动把光标移到内容最后
Sep 29 Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
Nov 21 Javascript
jQuery实现页面滚动时动态加载内容的方法
Mar 20 Javascript
js生成随机数的过程解析
Nov 24 Javascript
非常实用的js验证框架实现源码 附原理方法
Jun 08 Javascript
jQuery插件扩展extend的简单实现原理
Jun 24 Javascript
解决前端跨域问题方案汇总
Nov 20 Javascript
bootstrap table 表格中增加下拉菜单末行出现滚动条的快速解决方法
Jan 05 Javascript
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
Jul 21 Javascript
json.stringify()与json.parse()的区别以及用处
Jan 25 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生成静态文件的多种方法分享
2012/07/17 PHP
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
2013/06/28 PHP
php读取excel文件的简单实例
2013/08/26 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
2014/12/15 PHP
PHP文件操作详解
2016/12/30 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
ext读取两种结构的xml的代码
2008/11/05 Javascript
Jquery 在页面加载后执行的几种方式
2014/03/14 Javascript
javascript实现数组去重的多种方法
2016/03/14 Javascript
JS简单获取及显示当前时间的方法
2016/08/03 Javascript
jQuery中slidedown与slideup方法用法示例
2016/09/16 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
2017/02/03 Javascript
jQuery插件echarts实现的循环生成图效果示例【附demo源码下载】
2017/03/04 Javascript
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
jQuery Validate 无法验证 chosen-select元素的解决方法
2017/05/17 jQuery
ES6 async、await的基本使用方法示例
2020/06/06 Javascript
python基础教程之实现石头剪刀布游戏示例
2014/02/11 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
2015/12/31 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
Python实现注册、登录小程序功能
2018/09/21 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
2020/08/17 Python
英国电子产品购物网站:Tech in the basket
2019/11/08 全球购物
数据库笔试题
2013/05/09 面试题
企业申诉管理制度
2014/01/30 职场文书
抽样调查项目计划书
2014/04/24 职场文书
学期评语大全
2014/04/30 职场文书
车辆委托书范本
2014/10/05 职场文书
迟到检讨书
2015/01/26 职场文书
2015年学雷锋活动总结
2015/02/06 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android
TypeScript 使用 Tuple Union 声明函数重载
2022/04/07 Javascript
Python 装饰器(decorator)常用的创建方式及解析
2022/04/24 Python