用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 相关文章推荐
jquery 将disabled的元素置为enabled的三种方法
Jul 25 Javascript
javascript判断用户浏览器插件安装情况的代码
Jan 01 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
Jun 10 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
Jul 11 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
Sep 28 Javascript
使用重写url机制实现验证码换一张功能
Aug 01 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
Sep 05 Javascript
angularJs在多个控制器中共享服务数据的方法
Sep 30 Javascript
基于node.js实现爬虫的讲解
Feb 18 Javascript
vue vant Area组件使用详解
Dec 09 Javascript
我所理解的JavaScript中的this指向
Sep 04 Javascript
vue-admin-template配置快捷导航的代码(标签导航栏)
Sep 04 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变量的值类型和引用类型
2015/10/21 PHP
PHP实现打包下载文件的方法示例
2017/10/07 PHP
Javascript中的相等与不等运算
2010/04/25 Javascript
jQuery/CSS3图片特效插件整理推荐
2014/12/07 Javascript
jsp 网站引入外部css或者js失效问题解决
2016/10/31 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
Html中 IFrame的用法及注意点
2016/12/22 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
详解vue.js的事件处理器v-on:click
2017/06/27 Javascript
JS实现图片放大镜插件详解
2017/11/06 Javascript
vue 路由页面之间实现用手指进行滑动的方法
2018/02/23 Javascript
创建echart多个联动的示例代码
2018/11/23 Javascript
JavaScript常见事件处理程序实例总结
2019/01/05 Javascript
puppeteer库入门初探
2019/01/09 Javascript
AJAX在JQuery中的应用详解
2019/01/30 jQuery
vue.js循环radio的实例
2019/11/07 Javascript
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
[45:46]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS DT
2014/05/23 DOTA
Python多进程池 multiprocessing Pool用法示例
2018/09/07 Python
Python Image模块基本图像处理操作小结
2019/04/13 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
2020/04/17 Python
python中列表的含义及用法
2020/05/26 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
2020/10/10 Python
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
Fossil美国官网:化石手表、手袋、首饰及配饰
2019/02/17 全球购物
TobyDeals美国:在电子产品上获得最好的优惠和折扣
2019/08/11 全球购物
过滤器的用法
2013/10/08 面试题
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
小学见习报告
2014/10/31 职场文书
怎样写观后感
2015/06/19 职场文书
教育读书笔记
2015/07/02 职场文书
信息简报范文
2015/07/21 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书
python中取整数的几种方法
2021/11/07 Python
python_tkinter弹出对话框创建
2022/03/20 Python