用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 DOM操作 基于命令改变页面
May 06 Javascript
Jquey拖拽控件Draggable使用方法(asp.net环境)
Sep 28 Javascript
javascript jscroll模拟html元素滚动条
Dec 18 Javascript
浅析js封装和作用域
Jul 09 Javascript
jquery.post用法之type设置问题
Feb 24 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
Jun 23 Javascript
JavaScript中使用document.write向页面输出内容实例
Oct 16 Javascript
jQuery+HTML5+CSS3制作支持响应式布局时间轴插件
Aug 10 Javascript
jQuery焦点图左右转换效果
Dec 12 Javascript
Vue.2.0.5过渡效果使用技巧
Mar 16 Javascript
微信小程序表单验证功能完整实例
Dec 01 Javascript
原生js实现密码强度验证功能
Mar 18 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
关于文本留言本的分页代码
2006/10/09 PHP
php+mysql开源XNA 聚合程序发布 下载
2007/07/13 PHP
PHP中PDO的错误处理
2011/09/04 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
smarty高级特性之过滤器的使用方法
2015/12/25 PHP
深入解析Laravel5.5中的包自动发现Package Auto Discovery
2017/09/13 PHP
Yii2框架redis基本应用示例
2018/07/13 PHP
什么是json和jsonp,jQuery json实例详详细说明
2012/12/11 Javascript
jquery隐藏标签和显示标签的实例
2013/11/11 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
JavaScript与jQuery实现的闪烁输入效果
2016/02/18 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
jQuery层级选择器_动力节点节点Java学院整理
2017/07/04 jQuery
浅谈vue-lazyload实现的详细过程
2017/08/22 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
vue.js实例对象+组件树的详细介绍
2017/10/20 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
2020/07/19 Javascript
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
python实现simhash算法实例
2014/04/25 Python
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
Python基于pygame实现的弹力球效果(附源码)
2015/11/11 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
Python读取指定目录下指定后缀文件并保存为docx
2017/04/23 Python
Python实现删除文件中含“指定内容”的行示例
2017/06/09 Python
在python中实现将一张图片剪切成四份的方法
2018/12/05 Python
Python3之字节串bytes与字节数组bytearray的使用详解
2019/08/27 Python
使用python3批量下载rbsp数据的示例代码
2019/12/20 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
简单了解django处理跨域请求最佳解决方案
2020/03/25 Python
浅谈Python3中print函数的换行
2020/08/05 Python
ColourPop美国官网:卡拉泡泡,洛杉矶彩妆品牌
2019/04/28 全球购物
交心谈心活动总结
2015/05/11 职场文书
安全教育片观后感
2015/06/17 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书