@@ -5,17 +5,16 @@ define([
55 "./css/var/cssExpand" ,
66 "./css/var/isHidden" ,
77 "./css/adjustCSS" ,
8- "./css/defaultDisplay" ,
98 "./data/var/dataPriv" ,
109
1110 "./core/init" ,
12- "./effects/Tween" ,
1311 "./queue" ,
14- "./css" ,
1512 "./deferred" ,
16- "./traversing"
17- ] , function ( jQuery , document , rcssNum , cssExpand ,
18- isHidden , adjustCSS , defaultDisplay , dataPriv ) {
13+ "./traversing" ,
14+ "./manipulation" ,
15+ "./css" ,
16+ "./effects/Tween"
17+ ] , function ( jQuery , document , rcssNum , cssExpand , isHidden , adjustCSS , dataPriv ) {
1918
2019var
2120 fxNow , timerId ,
@@ -82,7 +81,8 @@ function createTween( value, prop, animation ) {
8281
8382function defaultPrefilter ( elem , props , opts ) {
8483 /* jshint validthis: true */
85- var prop , value , toggle , tween , hooks , oldfire , display , checkDisplay ,
84+ var prop , value , toggle , tween , hooks , oldfire , display , restoreDisplay ,
85+ isBox = "height" in props || "width" in props ,
8686 anim = this ,
8787 orig = { } ,
8888 style = elem . style ,
@@ -114,32 +114,6 @@ function defaultPrefilter( elem, props, opts ) {
114114 } ) ;
115115 }
116116
117- // Temporarily restrict "overflow" and "display" styles during height/width animations
118- if ( elem . nodeType === 1 && ( "height" in props || "width" in props ) ) {
119- // Support: IE 9 - 11
120- // Record all 3 overflow attributes because IE does not infer the shorthand
121- // from identically-valued overflowX and overflowY
122- opts . overflow = [ style . overflow , style . overflowX , style . overflowY ] ;
123-
124- // Animate inline elements as inline-block
125- display = jQuery . css ( elem , "display" ) ;
126- checkDisplay = display === "none" ?
127- dataPriv . get ( elem , "olddisplay" ) || defaultDisplay ( elem . nodeName ) :
128- display ;
129- if ( checkDisplay === "inline" && jQuery . css ( elem , "float" ) === "none" ) {
130- style . display = "inline-block" ;
131- }
132- }
133-
134- if ( opts . overflow ) {
135- style . overflow = "hidden" ;
136- anim . always ( function ( ) {
137- style . overflow = opts . overflow [ 0 ] ;
138- style . overflowX = opts . overflow [ 1 ] ;
139- style . overflowY = opts . overflow [ 2 ] ;
140- } ) ;
141- }
142-
143117 // Detect show/hide animations
144118 for ( prop in props ) {
145119 value = props [ prop ] ;
@@ -159,21 +133,66 @@ function defaultPrefilter( elem, props, opts ) {
159133 }
160134 }
161135 orig [ prop ] = dataShow && dataShow [ prop ] || jQuery . style ( elem , prop ) ;
136+ }
137+ }
162138
163- // Any non-show/hide property stops us from reverting a display override
164- } else {
165- display = undefined ;
139+ // Temporarily restrict "overflow" and "display" styles during box animations
140+ if ( isBox && elem . nodeType === 1 ) {
141+ // Support: IE 9 - 11
142+ // Record all 3 overflow attributes because IE does not infer the shorthand
143+ // from identically-valued overflowX and overflowY
144+ opts . overflow = [ style . overflow , style . overflowX , style . overflowY ] ;
145+
146+ // Identify a display type, preferring old show/hide data over the CSS cascade
147+ restoreDisplay = dataShow && dataShow . display ;
148+ if ( restoreDisplay == null ) {
149+ restoreDisplay = dataPriv . get ( elem , "olddisplay" ) ;
150+ }
151+ display = jQuery . css ( elem , "display" ) ;
152+ if ( display === "none" ) {
153+ display = restoreDisplay || jQuery . swap ( elem , { "display" : "" } , function ( ) {
154+ return jQuery . css ( elem , "display" ) ;
155+ } ) ;
156+ }
157+
158+ // Animate inline elements as inline-block
159+ if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
160+ if ( jQuery . css ( elem , "float" ) === "none" ) {
161+ if ( ! jQuery . isEmptyObject ( props ) ) {
162+ style . display = "inline-block" ;
163+
164+ // Restore the original display value at the end of pure show/hide animations
165+ } else if ( ! jQuery . isEmptyObject ( orig ) ) {
166+ if ( restoreDisplay == null ) {
167+ display = style . display ;
168+ restoreDisplay = display === "none" ? "" : display ;
169+ }
170+ style . display = "inline-block" ;
171+ anim . done ( function ( ) {
172+ style . display = restoreDisplay ;
173+ } ) ;
174+ }
175+ }
166176 }
167177 }
168178
179+ if ( opts . overflow ) {
180+ style . overflow = "hidden" ;
181+ anim . always ( function ( ) {
182+ style . overflow = opts . overflow [ 0 ] ;
183+ style . overflowX = opts . overflow [ 1 ] ;
184+ style . overflowY = opts . overflow [ 2 ] ;
185+ } ) ;
186+ }
187+
169188 // Implement show/hide animations
170189 if ( ! jQuery . isEmptyObject ( orig ) ) {
171190 if ( dataShow ) {
172191 if ( "hidden" in dataShow ) {
173192 hidden = dataShow . hidden ;
174193 }
175194 } else {
176- dataShow = dataPriv . access ( elem , "fxshow" , { } ) ;
195+ dataShow = dataPriv . access ( elem , "fxshow" , { display : restoreDisplay } ) ;
177196 }
178197
179198 // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
@@ -186,9 +205,6 @@ function defaultPrefilter( elem, props, opts ) {
186205 }
187206
188207 anim . done ( function ( ) {
189- if ( checkDisplay === "inline" && style . display === "inline-block" ) {
190- style . display = dataPriv . get ( elem , "olddisplay" ) || "" ;
191- }
192208 if ( ! hidden ) {
193209 jQuery ( elem ) . hide ( ) ;
194210 }
@@ -209,10 +225,6 @@ function defaultPrefilter( elem, props, opts ) {
209225 }
210226 }
211227 }
212-
213- // If this is a noop like .hide().hide(), revert a display override
214- } else if ( ( display === "none" ? defaultDisplay ( elem . nodeName ) : display ) === "inline" ) {
215- style . display = display ;
216228 }
217229}
218230
0 commit comments