diff --git a/ionic/components/menu/menu-gestures.ts b/ionic/components/menu/menu-gestures.ts index c82ffb5959..87dc517c70 100644 --- a/ionic/components/menu/menu-gestures.ts +++ b/ionic/components/menu/menu-gestures.ts @@ -3,7 +3,6 @@ import {SlideEdgeGesture} from '../../gestures/slide-edge-gesture'; import {assign} from '../../util/util'; - export class MenuContentGesture extends SlideEdgeGesture { constructor(public menu: Menu, targetEl: Element, options = {}) { @@ -19,8 +18,36 @@ export class MenuContentGesture extends SlideEdgeGesture { } canStart(ev) { - let validAngle = ((-35 <= ev.angle && ev.angle <= 35) || (180 >= ev.angle && ev.angle >= 145) || (-180 <= ev.angle && ev.angle <= -145)); - return this.menu.isOpen && this.menu.isEnabled && validAngle ? true : super.canStart(ev); + let menu = this.menu; + + console.debug('menu canStart, id', menu.id, 'angle', ev.angle, 'distance', ev.distance); + + if (!menu.isEnabled || !menu.isSwipeEnabled) { + console.debug('menu canStart, isEnabled', menu.isEnabled, 'isSwipeEnabled', menu.isSwipeEnabled, 'id', menu.id); + return false; + } + + if (ev.distance > 50) { + // the distance is longer than you'd expect a side menu swipe to be + console.debug('menu canStart, distance too far', ev.distance, 'id', menu.id); + return false; + } + + if (menu.side === 'left') { + // left side menu + if (ev.angle > -40 && ev.angle < 40) { + return super.canStart(ev); + } + + } else if (menu.side === 'right') { + // right side menu + if ((ev.angle > 140 && ev.angle <= 180) || (ev.angle > -140 && ev.angle <= -180)) { + return super.canStart(ev); + } + } + + // didn't pass the test, don't open this menu + return false; } // Set CSS, then wait one frame for it to apply before sliding starts diff --git a/ionic/components/menu/menu.ts b/ionic/components/menu/menu.ts index 406f9eeefe..16836ff46e 100644 --- a/ionic/components/menu/menu.ts +++ b/ionic/components/menu/menu.ts @@ -282,7 +282,7 @@ export class Menu extends Ion { setOpen(shouldOpen) { // _isPrevented is used to prevent unwanted opening/closing after swiping open/close // or swiping open the menu while pressing down on the menuToggle button - if (shouldOpen === this.isOpen || this._isPrevented()) { + if ((shouldOpen && this.isOpen) || this._isPrevented()) { return Promise.resolve(); } diff --git a/ionic/components/menu/test/basic/index.ts b/ionic/components/menu/test/basic/index.ts index a23df1a89c..c9c922e607 100644 --- a/ionic/components/menu/test/basic/index.ts +++ b/ionic/components/menu/test/basic/index.ts @@ -64,8 +64,8 @@ class E2EApp { console.log('onMenuOpening', ev); } - isHidden() { + isChangeDetecting() { console.log('Change detection', ++this.changeDetectionCount); - return false; + return true; } } diff --git a/ionic/components/menu/test/basic/main.html b/ionic/components/menu/test/basic/main.html index 81ac00582e..ee03015948 100644 --- a/ionic/components/menu/test/basic/main.html +++ b/ionic/components/menu/test/basic/main.html @@ -1,4 +1,4 @@ - + Left Menu @@ -12,7 +12,51 @@ {{p.title}} - + + + + + + + + + + + + + + + + + + + + + + @@ -40,9 +84,60 @@ Close Menu + + + + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/ionic/components/menu/test/basic/page1.html b/ionic/components/menu/test/basic/page1.html index 9a75a6c92e..0d1b51c54b 100644 --- a/ionic/components/menu/test/basic/page1.html +++ b/ionic/components/menu/test/basic/page1.html @@ -51,4 +51,6 @@

+ +