用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实现的跟随鼠标移动的时钟效果(中英文日期显示)
Jan 17 Javascript
在jQuery中 常用的选择器介绍
Apr 16 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
Jun 15 Javascript
使用jquery解析XML示例代码
Sep 05 Javascript
用队列模拟jquery的动画算法实例
Jan 20 Javascript
Shell脚本实现Linux系统和进程资源监控
Mar 05 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
Jul 10 Javascript
全面解析Bootstrap中transition、affix的使用方法
May 30 Javascript
极力推荐10个短小实用的JavaScript代码段
Aug 03 Javascript
JS监控关闭浏览器操作的实例详解
Sep 12 Javascript
关于axios不能使用Vue.use()浅析
Jan 12 Javascript
vue使用require.context实现动态注册路由
Dec 25 Vue.js
通过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下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
2010/12/29 PHP
基于Snoopy的PHP近似完美获取网站编码的代码
2011/10/23 PHP
PHP类的静态(static)方法和静态(static)变量使用介绍
2012/02/19 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
2016/01/09 PHP
php实现遍历文件夹的方法汇总
2017/03/02 PHP
javascript oop开发滑动(slide)菜单控件
2010/08/25 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
2013/10/29 Javascript
利用JS来控制键盘的上下左右键(示例代码)
2013/12/14 Javascript
使用jQuery的attr方法来修改onclick值
2014/07/07 Javascript
JavaScript控制两个列表框listbox左右交换数据的方法
2015/03/18 Javascript
基于jQuery的ajax方法封装
2016/07/14 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
2019/05/13 Javascript
vue项目前端错误收集之sentry教程详解
2019/05/27 Javascript
vue 路由子组件created和mounted不起作用的解决方法
2019/11/05 Javascript
echarts实现折线图的拖拽效果
2019/12/19 Javascript
Vue数字输入框组件示例代码详解
2020/01/15 Javascript
React实现类似淘宝tab居中切换效果的示例代码
2020/06/02 Javascript
vue+Element-ui实现登录注册表单
2020/11/17 Javascript
python实现斐波那契递归函数的方法
2014/09/08 Python
python将unicode转为str的方法
2017/06/21 Python
Python中偏函数用法示例
2018/06/07 Python
Python判断变量名是否合法的方法示例
2019/01/28 Python
python3 sorted 如何实现自定义排序标准
2020/03/12 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
2020/09/28 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
python如何实现递归转非递归
2021/02/25 Python
软件工程师岗位职责
2013/11/16 职场文书
英文商务邀请信
2014/01/22 职场文书
就业自我评价
2014/02/04 职场文书
预备党员入党自我评价范文
2014/03/10 职场文书
勾股定理课后反思
2014/04/26 职场文书
精神文明建设先进工作者事迹材料
2014/05/02 职场文书
2014法院四风问题对照检查材料思想汇报
2014/10/04 职场文书
医院中层管理人员培训心得体会
2016/01/11 职场文书
java设计模式--三种工厂模式详解
2021/07/21 Java/Android