Skip to content

Commit 9bbe485

Browse files
committed
fix(menu): backdrop click without 300ms delay
fixes #6405
1 parent 87330b3 commit 9bbe485

File tree

1 file changed

+16
-20
lines changed

1 file changed

+16
-20
lines changed

src/components/menu/menu.ts

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { MenuController } from './menu-controller';
99
import { MenuType } from './menu-types';
1010
import { Platform } from '../../platform/platform';
1111
import { GestureController } from '../../gestures/gesture-controller';
12+
import { UIEventManager } from '../../util/ui-event-manager';
1213

1314

1415
/**
@@ -178,7 +179,7 @@ import { GestureController } from '../../gestures/gesture-controller';
178179
selector: 'ion-menu',
179180
template:
180181
'<div class="menu-inner"><ng-content></ng-content></div>' +
181-
'<ion-backdrop (click)="bdClick($event)" disableScroll="false"></ion-backdrop>',
182+
'<ion-backdrop disableScroll="false"></ion-backdrop>',
182183
host: {
183184
'role': 'navigation'
184185
},
@@ -195,7 +196,7 @@ export class Menu {
195196
private _isAnimating: boolean = false;
196197
private _isPers: boolean = false;
197198
private _init: boolean = false;
198-
199+
private _events: UIEventManager = new UIEventManager();
199200

200201
/**
201202
* @private
@@ -207,11 +208,6 @@ export class Menu {
207208
*/
208209
@ViewChild(Backdrop) backdrop: Backdrop;
209210

210-
/**
211-
* @private
212-
*/
213-
onContentClick: EventListener;
214-
215211
/**
216212
* @input {any} A reference to the content element the menu should use.
217213
*/
@@ -349,15 +345,6 @@ export class Menu {
349345
}
350346
self._setListeners();
351347

352-
// create a reusable click handler on this instance, but don't assign yet
353-
self.onContentClick = function(ev: UIEvent) {
354-
if (self._isEnabled) {
355-
ev.preventDefault();
356-
ev.stopPropagation();
357-
self.close();
358-
}
359-
};
360-
361348
self._cntEle.classList.add('menu-content');
362349
self._cntEle.classList.add('menu-content-' + self.type);
363350

@@ -368,11 +355,11 @@ export class Menu {
368355
/**
369356
* @private
370357
*/
371-
bdClick(ev: Event) {
372-
console.debug('backdrop clicked');
358+
onBackdropClick(ev: UIEvent): boolean {
373359
ev.preventDefault();
374360
ev.stopPropagation();
375361
this._menuCtrl.close();
362+
return false;
376363
}
377364

378365
/**
@@ -502,10 +489,18 @@ export class Menu {
502489

503490
(<any>this._cntEle.classList)[isOpen ? 'add' : 'remove']('menu-content-open');
504491

505-
this._cntEle.removeEventListener('click', this.onContentClick);
492+
this._events.unlistenAll();
506493

507494
if (isOpen) {
508-
this._cntEle.addEventListener('click', this.onContentClick);
495+
let callback = this.onBackdropClick.bind(this);
496+
this._events.pointerEvents({
497+
element: this._cntEle,
498+
pointerDown: callback
499+
});
500+
this._events.pointerEvents({
501+
element: this.backdrop.getNativeElement(),
502+
pointerDown: callback
503+
});
509504
this.ionOpen.emit(true);
510505

511506
} else {
@@ -612,6 +607,7 @@ export class Menu {
612607
*/
613608
ngOnDestroy() {
614609
this._menuCtrl.unregister(this);
610+
this._events.unlistenAll();
615611
this._cntGesture && this._cntGesture.destroy();
616612
this._type && this._type.destroy();
617613
this._resizeUnreg && this._resizeUnreg();

0 commit comments

Comments
 (0)