-var elemdisplay = {};
+var elemdisplay = {},
+ fxHeight = [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
+ fxWidth = [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
+ fxOpacity = [ "opacity" ];
+
+function genFx( type, width, height, extra ){
+ var obj = {};
+ jQuery.each(width.concat( height || [], extra || []), function(){
+ obj[ this ] = type;
+ });
+ return obj;
+}
jQuery.fn.extend({
show: function(speed,callback){
if ( speed ) {
- return this.animate({
- height: "show", width: "show", opacity: "show"
- }, speed, callback);
+ return this.animate( genFx("show", fxHeight, fxWidth, fxOpacity), speed, callback);
} else {
for ( var i = 0, l = this.length; i < l; i++ ){
var old = jQuery.data(this[i], "olddisplay");
hide: function(speed,callback){
if ( speed ) {
- return this.animate({
- height: "hide", width: "hide", opacity: "hide"
- }, speed, callback);
+ return this.animate( genFx("hide", fxHeight, fxWidth, fxOpacity), speed, callback);
} else {
for ( var i = 0, l = this.length; i < l; i++ ){
var old = jQuery.data(this[i], "olddisplay");
var state = bool ? fn : jQuery(this).is(":hidden");
jQuery(this)[ state ? "show" : "hide" ]();
}) :
- this.animate({
- height: "toggle", width: "toggle", opacity: "toggle"
- }, fn, fn2);
+ this.animate(genFx("toggle", fxHeight, fxWidth, fxOpacity), fn, fn2);
},
fadeTo: function(speed,to,callback){
// Generate shortcuts for custom animations
jQuery.each({
- slideDown: { height:"show" },
- slideUp: { height: "hide" },
- slideToggle: { height: "toggle" },
+ slideDown: genFx("show", fxHeight),
+ slideUp: genFx("hide", fxHeight),
+ slideToggle: genFx("toggle", fxHeight),
fadeIn: { opacity: "show" },
fadeOut: { opacity: "hide" }
}, function( name, props ){
this.options.show = true;
// Begin the animation
- this.custom(0, this.cur());
-
// Make sure that we start at a small width/height to avoid any
// flash of content
- if ( this.prop == "width" || this.prop == "height" )
- this.elem.style[this.prop] = "1px";
+ this.custom(this.prop == "width" || this.prop == "height" ? 1 : 0, this.cur());
// Start by showing the element
jQuery(this.elem).show();
// Hide the element if the "hide" operation was done
if ( this.options.hide )
- this.elem.style.display = "none";
+ jQuery(this.elem).hide();
// Reset the properties, if the item has been hidden or shown
if ( this.options.hide || this.options.show )
},
_default: function(fx){
- if( fx.prop in fx.elem )
- fx.elem[ fx.prop ] = fx.now;
- else if( fx.elem.style )
+ if ( fx.elem.style && fx.elem.style[ fx.prop ] != null )
fx.elem.style[ fx.prop ] = fx.now + fx.unit;
+ else
+ fx.elem[ fx.prop ] = fx.now;
}
}
});