用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 使用手册(二)
Sep 23 Javascript
jquery 倒计时效果实现秒杀思路
Sep 11 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
Oct 25 Javascript
javascript 3d 逐侦产品展示(核心精简)
Mar 26 Javascript
JavaScript tab选项卡插件实例代码
Feb 23 Javascript
基于Swiper实现移动端页面图片轮播效果
Dec 28 Javascript
vue观察模式浅析
Sep 25 Javascript
jQuery 同时获取多个标签的指定内容并储存为数组
Nov 20 jQuery
vue-cli webpack配置文件分析
May 20 Javascript
JavaScript实现拖拽盒子效果
Feb 06 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
Sep 29 Javascript
详解微信小程序(Taro)手动埋点和自动埋点的实现
Mar 02 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
php5 mysql分页实例代码
2008/04/10 PHP
php下intval()和(int)转换使用与区别
2008/07/18 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
2015/12/31 PHP
php微信公众平台示例代码分析(二)
2016/12/06 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
2020/05/02 PHP
JavaScript Undefined,Null类型和NaN值区别
2008/10/22 Javascript
在JavaScript中,为什么要尽可能使用局部变量?
2009/04/06 Javascript
JavaScript isPrototypeOf和hasOwnProperty使用区别
2010/03/04 Javascript
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
2011/07/11 Javascript
js屏蔽鼠标键盘(右键/Ctrl+N/Shift+F10/F11/F5刷新/退格键)
2013/01/24 Javascript
html组件不可输入(只读)同时任何组件都有效
2013/04/01 Javascript
js 3种归并操作的实例代码
2013/10/30 Javascript
jQuery使用animate创建动画用法实例
2015/08/07 Javascript
JS+CSS实现自适应选项卡宽度的圆角滑动门效果
2015/09/15 Javascript
JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题
2016/08/03 Javascript
关于webuploader插件使用过程遇到的小问题
2016/11/07 Javascript
详解vue表单验证组件 v-verify-plugin
2017/04/19 Javascript
分享19个JavaScript 有用的简写写法
2017/07/07 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
2018/10/24 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
js数组去重的方法总结
2019/01/18 Javascript
elementUI多选框反选的实现代码
2019/04/03 Javascript
jQuery实现轮播图效果
2019/11/26 jQuery
vue如何在用户要关闭当前网页时弹出提示的实现
2020/05/31 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
2020/06/04 Javascript
python将ip地址转换成整数的方法
2015/03/17 Python
分析Python编程时利用wxPython来支持多线程的方法
2015/04/07 Python
图文详解python安装Scrapy框架步骤
2019/05/20 Python
python3的url编码和解码,自定义gbk、utf-8的例子
2019/08/22 Python
Python调用REST API接口的几种方式汇总
2020/10/19 Python
高街生活方式全球在线商店:AZBRO
2017/08/26 全球购物
英国复古和经典球衣网站:Vintage Football Shirts
2018/10/05 全球购物
2014年妇产科工作总结
2014/12/08 职场文书
经费申请报告
2015/05/15 职场文书
刑事上诉状(量刑过重)
2015/05/23 职场文书
高中开学感言
2015/08/01 职场文书