5
5
* Use of this source code is governed by an MIT-style license that can be
6
6
* found in the LICENSE file at https://angular.io/license
7
7
*/
8
-
9
8
import { ElementRef , NgZone } from '@angular/core' ;
10
- import { Platform } from '@angular/cdk/platform' ;
9
+ import { Platform , supportsPassiveEventListeners } from '@angular/cdk/platform' ;
11
10
import { RippleRef , RippleState } from './ripple-ref' ;
12
11
13
12
@@ -58,6 +57,9 @@ export class RippleRenderer {
58
57
/** Time in milliseconds when the last touchstart event happened. */
59
58
private _lastTouchStartEvent : number ;
60
59
60
+ /** Options that apply to all the event listeners that are bound by the renderer. */
61
+ private _eventOptions = supportsPassiveEventListeners ( ) ? ( { passive : true } as any ) : false ;
62
+
61
63
/** Ripple config for all ripples created by events. */
62
64
rippleConfig : RippleConfig = { } ;
63
65
@@ -70,12 +72,12 @@ export class RippleRenderer {
70
72
this . _containerElement = elementRef . nativeElement ;
71
73
72
74
// Specify events which need to be registered on the trigger.
73
- this . _triggerEvents . set ( 'mousedown' , this . onMousedown . bind ( this ) ) ;
74
- this . _triggerEvents . set ( 'mouseup' , this . onPointerUp . bind ( this ) ) ;
75
- this . _triggerEvents . set ( 'mouseleave' , this . onPointerUp . bind ( this ) ) ;
75
+ this . _triggerEvents . set ( 'mousedown' , this . onMousedown ) ;
76
+ this . _triggerEvents . set ( 'mouseup' , this . onPointerUp ) ;
77
+ this . _triggerEvents . set ( 'mouseleave' , this . onPointerUp ) ;
76
78
77
- this . _triggerEvents . set ( 'touchstart' , this . onTouchStart . bind ( this ) ) ;
78
- this . _triggerEvents . set ( 'touchend' , this . onPointerUp . bind ( this ) ) ;
79
+ this . _triggerEvents . set ( 'touchstart' , this . onTouchStart ) ;
80
+ this . _triggerEvents . set ( 'touchend' , this . onPointerUp ) ;
79
81
80
82
// By default use the host element as trigger element.
81
83
this . setTriggerElement ( this . _containerElement ) ;
@@ -173,22 +175,23 @@ export class RippleRenderer {
173
175
// Remove all previously register event listeners from the trigger element.
174
176
if ( this . _triggerElement ) {
175
177
this . _triggerEvents . forEach ( ( fn , type ) => {
176
- this . _triggerElement ! . removeEventListener ( type , fn ) ;
178
+ this . _triggerElement ! . removeEventListener ( type , fn , this . _eventOptions ) ;
177
179
} ) ;
178
180
}
179
181
180
182
if ( element ) {
181
183
// If the element is not null, register all event listeners on the trigger element.
182
184
this . _ngZone . runOutsideAngular ( ( ) => {
183
- this . _triggerEvents . forEach ( ( fn , type ) => element . addEventListener ( type , fn ) ) ;
185
+ this . _triggerEvents . forEach ( ( fn , type ) =>
186
+ element . addEventListener ( type , fn , this . _eventOptions ) ) ;
184
187
} ) ;
185
188
}
186
189
187
190
this . _triggerElement = element ;
188
191
}
189
192
190
193
/** Function being called whenever the trigger is being pressed using mouse. */
191
- private onMousedown ( event : MouseEvent ) {
194
+ private onMousedown = ( event : MouseEvent ) => {
192
195
const isSyntheticEvent = this . _lastTouchStartEvent &&
193
196
Date . now ( ) < this . _lastTouchStartEvent + IGNORE_MOUSE_EVENTS_TIMEOUT ;
194
197
@@ -199,7 +202,7 @@ export class RippleRenderer {
199
202
}
200
203
201
204
/** Function being called whenever the trigger is being pressed using touch. */
202
- private onTouchStart ( event : TouchEvent ) {
205
+ private onTouchStart = ( event : TouchEvent ) => {
203
206
if ( ! this . rippleDisabled ) {
204
207
// Some browsers fire mouse events after a `touchstart` event. Those synthetic mouse
205
208
// events will launch a second ripple if we don't ignore mouse events for a specific
@@ -212,7 +215,7 @@ export class RippleRenderer {
212
215
}
213
216
214
217
/** Function being called whenever the trigger is being released. */
215
- private onPointerUp ( ) {
218
+ private onPointerUp = ( ) => {
216
219
if ( ! this . _isPointerDown ) {
217
220
return ;
218
221
}
0 commit comments