Skip to content

Commit 3dd577b

Browse files
crisbetojosephperrott
authored andcommitted
fix(drag-drop): use passive event listeners for start events (#13526)
1 parent df308b8 commit 3dd577b

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

src/cdk/drag-drop/drag.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import {
2828
SkipSelf,
2929
ViewContainerRef,
3030
} from '@angular/core';
31+
import {supportsPassiveEventListeners} from '@angular/cdk/platform';
3132
import {Observable, Subject, Subscription, Observer} from 'rxjs';
3233
import {take} from 'rxjs/operators';
3334
import {DragDropRegistry} from './drag-drop-registry';
@@ -77,6 +78,10 @@ export function CDK_DRAG_CONFIG_FACTORY(): CdkDragConfig {
7778
return {dragStartThreshold: 5, pointerDirectionChangeThreshold: 5};
7879
}
7980

81+
/** Options that can be used to bind a passive event listener. */
82+
const passiveEventListenerOptions = supportsPassiveEventListeners() ?
83+
{passive: true} as EventListenerOptions : false;
84+
8085
/** Element that can be moved inside a CdkDropList container. */
8186
@Directive({
8287
selector: '[cdkDrag]',
@@ -255,15 +260,17 @@ export class CdkDrag<T = any> implements AfterViewInit, OnDestroy {
255260
// their original DOM position and then they get transferred to the portal.
256261
this._ngZone.onStable.asObservable().pipe(take(1)).subscribe(() => {
257262
const rootElement = this._rootElement = this._getRootElement();
258-
rootElement.addEventListener('mousedown', this._pointerDown);
259-
rootElement.addEventListener('touchstart', this._pointerDown);
263+
rootElement.addEventListener('mousedown', this._pointerDown, passiveEventListenerOptions);
264+
rootElement.addEventListener('touchstart', this._pointerDown, passiveEventListenerOptions);
260265
toggleNativeDragInteractions(rootElement , false);
261266
});
262267
}
263268

264269
ngOnDestroy() {
265-
this._rootElement.removeEventListener('mousedown', this._pointerDown);
266-
this._rootElement.removeEventListener('touchstart', this._pointerDown);
270+
this._rootElement.removeEventListener('mousedown', this._pointerDown,
271+
passiveEventListenerOptions);
272+
this._rootElement.removeEventListener('touchstart', this._pointerDown,
273+
passiveEventListenerOptions);
267274
this._destroyPreview();
268275
this._destroyPlaceholder();
269276

0 commit comments

Comments
 (0)