用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+Jq获取URL参数的集中方法示例代码
May 20 Javascript
jQuery搜索子元素的方法
Feb 10 Javascript
javascript实现表格增删改操作实例详解
May 15 Javascript
js拼接html字符串的注意事项
Oct 13 Javascript
微信小程序 网络API 上传、下载详解
Nov 09 Javascript
JS实现一个简单的日历
Feb 22 Javascript
js数字计算 误差问题的快速解决方法
Feb 28 Javascript
jQuery+ajax实现局部刷新的两种方法
Jun 08 jQuery
JavaScript使用FileReader实现图片上传预览效果
Mar 27 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
Aug 16 Javascript
微信小程序pinker组件使用实现自动相减日期
May 07 Javascript
解决vue项目本地启动时无法携带cookie的问题
Feb 06 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实现的短网址算法分享
2014/06/20 PHP
PHP设计模式之观察者模式实例
2016/02/22 PHP
Yii框架布局文件的动态切换操作示例
2019/11/11 PHP
jQuery Animation实现CSS3动画示例介绍
2013/08/14 Javascript
javascript的document.referrer浏览器支持、失效情况总结
2014/07/18 Javascript
jQuery搜索子元素的方法
2015/02/10 Javascript
JavaScript函数作用域链分析
2015/02/13 Javascript
node-webkit打包成exe文件被360误报木马的解决方法
2015/03/11 Javascript
JavaScript实现图片轮播的方法
2015/07/31 Javascript
JavaScript通过代码调用Flash显示的方法
2016/02/02 Javascript
jQuery的promise与deferred对象在异步回调中的作用
2016/05/03 Javascript
微信小程序 less文件编译成wxss文件实现办法
2016/12/05 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
2017/02/23 Javascript
使用JS编写的随机抽取号码的小程序
2017/08/11 Javascript
9种改善AngularJS性能的方法
2017/11/28 Javascript
Webpack 之 babel-loader文件预处理器详解
2018/03/23 Javascript
JS装饰器函数用法总结
2018/04/21 Javascript
jQuery实现的中英文切换功能示例
2019/01/11 jQuery
微信小程序授权登陆及每次检查是否授权实例代码
2019/09/18 Javascript
javascript利用键盘控制小方块的移动
2020/04/20 Javascript
用Python编写一个简单的Lisp解释器的教程
2015/04/03 Python
Python字符串格式化
2015/06/15 Python
python中Switch/Case实现的示例代码
2017/11/09 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
Python hashlib模块实例使用详解
2019/12/24 Python
Scrapy实现模拟登录的示例代码
2021/02/21 Python
仿酷狗html5手机音乐播放器主要部分代码
2013/05/15 HTML / CSS
英国复古和经典球衣网站:Vintage Football Shirts
2018/10/05 全球购物
计算机软件个人的自荐信范文
2013/12/01 职场文书
大学生职业生涯规划书参考模板
2014/03/05 职场文书
学校地质灾害防治方案
2014/06/10 职场文书
先进员工事迹材料
2014/12/20 职场文书
化验员岗位职责
2015/02/14 职场文书
工资证明范本
2015/06/12 职场文书
导游词书写之黄山
2019/08/06 职场文书