@@ -92,7 +92,9 @@ export class OverlayRef implements PortalHost {
92
92
93
93
// Add class to fade-in the backdrop after one frame.
94
94
requestAnimationFrame ( ( ) => {
95
- this . _backdropElement . classList . add ( 'md-overlay-backdrop-showing' ) ;
95
+ if ( this . _backdropElement ) {
96
+ this . _backdropElement . classList . add ( 'md-overlay-backdrop-showing' ) ;
97
+ }
96
98
} ) ;
97
99
}
98
100
@@ -101,18 +103,27 @@ export class OverlayRef implements PortalHost {
101
103
let backdropToDetach = this . _backdropElement ;
102
104
103
105
if ( backdropToDetach ) {
106
+ let onTransitionEnd = ( ) => {
107
+ if ( backdropToDetach ) {
108
+ backdropToDetach . parentNode . removeChild ( backdropToDetach ) ;
109
+
110
+ // It is possible that a new portal has been attached to this overlay since we started
111
+ // removing the backdrop. If that is the case, only clear the backdrop reference if it
112
+ // is still the same instance that we started to remove.
113
+ if ( this . _backdropElement == backdropToDetach ) {
114
+ this . _backdropElement = null ;
115
+ }
116
+ }
117
+ } ;
118
+
104
119
backdropToDetach . classList . remove ( 'md-overlay-backdrop-showing' ) ;
105
120
backdropToDetach . classList . remove ( this . _state . backdropClass ) ;
106
- backdropToDetach . addEventListener ( 'transitionend' , ( ) => {
107
- backdropToDetach . parentNode . removeChild ( backdropToDetach ) ;
108
-
109
- // It is possible that a new portal has been attached to this overlay since we started
110
- // removing the backdrop. If that is the case, only clear the backdrop reference if it
111
- // is still the same instance that we started to remove.
112
- if ( this . _backdropElement == backdropToDetach ) {
113
- this . _backdropElement = null ;
114
- }
115
- } ) ;
121
+ backdropToDetach . addEventListener ( 'transitionend' , onTransitionEnd ) ;
122
+
123
+ // If the backdrop doesn't have a transition, the `transitionend` event won't fire.
124
+ // In this case we make it unclickable and we try to remove it after a delay.
125
+ backdropToDetach . style . pointerEvents = 'none' ;
126
+ setTimeout ( onTransitionEnd , 500 ) ;
116
127
}
117
128
}
118
129
}
0 commit comments