用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插件
Feb 24 Javascript
js实现select组件的选择输入过滤代码
Oct 14 Javascript
JavaScript动态修改网页元素内容的方法
Mar 21 Javascript
JavaScript获取当前网页标题(title)的方法
Apr 03 Javascript
jQuery制作简洁的图片轮播效果
Apr 03 Javascript
jQuery的animate函数实现图文切换动画效果
May 03 Javascript
深入理解选择框脚本[推荐]
Dec 13 Javascript
Angular directive递归实现目录树结构代码实例
May 05 Javascript
详解jQuery中关于Ajax的几个常用的函数
Jul 17 jQuery
js中el表达式的使用和非空判断方法
Mar 28 Javascript
Bootstrap实现省市区三级联动(亲测可用)
Jul 26 Javascript
vue点击当前路由高亮小案例
Sep 26 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 cookis创建实现代码
2009/03/16 PHP
PHP 数组教程 定义数组
2009/10/23 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
2016/01/14 PHP
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
Javascript里使用Dom操作Xml
2006/09/20 Javascript
node在两个div之间移动,用ztree实现
2013/03/06 Javascript
Jquery遍历Json数据的方法
2015/04/20 Javascript
基于javascript编写简单日历
2016/05/02 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
基于vuejs+webpack的日期选择插件
2020/05/21 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
JS 实现 ajax 异步浏览器兼容问题
2017/01/21 Javascript
详解vue.js的事件处理器v-on:click
2017/06/27 Javascript
python网络编程之读取网站根目录实例
2014/09/30 Python
Python读写文件方法总结
2015/06/09 Python
详解Python网络爬虫功能的基本写法
2016/01/28 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
2017/04/18 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
python复制文件到指定目录的实例
2018/04/27 Python
python日期时间转为字符串或者格式化输出的实例
2018/05/29 Python
django用户登录验证的完整示例代码
2019/07/21 Python
python matplotlib库的基本使用
2020/09/23 Python
python中使用asyncio实现异步IO实例分析
2021/02/26 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
2021/02/26 Python
日本最大级玩偶手办购物:あみあみ Amiami
2018/04/23 全球购物
Super-Pharm波兰:药房和香水在一个地方
2020/08/18 全球购物
大学生的应聘自我评价
2013/12/13 职场文书
小学毕业感言300字
2014/02/19 职场文书
C++程序员求职信范文
2014/04/14 职场文书
教师节倡议书
2014/08/30 职场文书
公司开会通知
2015/04/20 职场文书
七年级作文之《我和我的祖国》观后感作文
2019/10/18 职场文书
python中数组和列表的简单实例
2022/03/25 Python
Anaconda安装pytorch和paddle的方法步骤
2022/04/03 Python