仿JQuery的show与hide动画函数
2010-09-17 14:49
555 查看
首先介绍两个工具函数:
1 //根据ID返回dom元素
2 var $ = function(id){return document.getElementById(id);}
3 //返回dom元素的当前某css值
4 var getCss = function(obj,name){
5 //ie
6 if(obj.currentStyle) {
7 return obj.currentStyle[name];
8 }
9 //ff
else {
var style = document.defaultView.getComputedStyle(obj,null);
return style[name];
}
}
Hide函数:
2 var hide = function(obj,speed,fn){
3 obj = $(obj);
4
5 if (!speed) {
6 obj.style.display = 'none';
7 return;
8 }
9 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函数类似,只是思路相反而已
1 var show = function(obj,speed,fn){
2
3 obj = $(obj);
4
5 if (!speed) {
6 obj.style.display = 'block';
7 return;
8 }
9 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');
});
呃。。。感觉写得好冗余,但不知要如何再优化,希望有高手能写个精简些的。。。
1 //根据ID返回dom元素
2 var $ = function(id){return document.getElementById(id);}
3 //返回dom元素的当前某css值
4 var getCss = function(obj,name){
5 //ie
6 if(obj.currentStyle) {
7 return obj.currentStyle[name];
8 }
9 //ff
else {
var style = document.defaultView.getComputedStyle(obj,null);
return style[name];
}
}
Hide函数:
2 var hide = function(obj,speed,fn){
3 obj = $(obj);
4
5 if (!speed) {
6 obj.style.display = 'none';
7 return;
8 }
9 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函数类似,只是思路相反而已
1 var show = function(obj,speed,fn){
2
3 obj = $(obj);
4
5 if (!speed) {
6 obj.style.display = 'block';
7 return;
8 }
9 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');
});
呃。。。感觉写得好冗余,但不知要如何再优化,希望有高手能写个精简些的。。。
相关文章推荐
- 用js模拟JQuery的show与hide动画函数代码
- jQuery动画-让页面动起来! (2)基本的动画函数主要分为show, hide和toggle
- JQuery 显示隐藏动画( show(),hide(),toggle() )
- jQuery-动画 animate() hide() show() toggle() fadeT0() slideToggle()
- 【jQuery】动画效果的show()和hide()方法
- jquery动画show () hide()
- jQuery动画animate使用show hide toggle
- jquery 动画函数animate/show/slideDown/fadeIn/toggle
- jQuery学习21---简单动画效果,show,hide,slideUp,slideDown,fadeOut,fadeIn
- 4.2.1: jQuery动画之show()方法和hide()方法
- jQuery动画效果(show与hide/toggle/slideUp/slideToggle/fadeIn/fadeTo)
- jQuery 效果 - 隐藏hide() 和 显示show()动画实例
- Jquery中使用show()与hide()方法动画显示和隐藏图片
- jQuery showHide动画效果
- jQuery动画效果(show与hide/toggle/slideUp/slideToggle/fadeIn/fadeTo)
- Jquery中使用show()与hide()方法动画显示和隐藏图片
- jQuery 动画特效show() hide() slideUp() slideDown() fadeIn() fadeOut() animate() stop() delay()
- jQuery中的slideUp()、slideDown()、hide()、show()
- jquery hide() show()