diff --git a/ionic/components/menu/menu-gestures.ts b/ionic/components/menu/menu-gestures.ts index b13f562ffd..f2d20ed1f5 100644 --- a/ionic/components/menu/menu-gestures.ts +++ b/ionic/components/menu/menu-gestures.ts @@ -1,15 +1,16 @@ import {Menu} from './menu'; import {SlideEdgeGesture} from 'ionic/gestures/slide-edge-gesture'; +import * as util from 'ionic/util'; class MenuContentGesture extends SlideEdgeGesture { - constructor(menu: Menu) { + constructor(menu: Menu, targetEl: Element, options = {}) { - super(menu.getContentElement(), { + super(targetEl, util.extend({ direction: (menu.side === 'left' || menu.side === 'right') ? 'x' : 'y', edge: menu.side, threshold: 75 - }); + }, options)); this.menu = menu; this.listen(); @@ -45,15 +46,27 @@ class MenuContentGesture extends SlideEdgeGesture { } } + +/** + * Support dragging the target menu as well as the content. + */ +export class TargetGesture extends MenuContentGesture { + constructor(menu: Menu) { + super(menu, menu.getNativeElement(), { + threshold: 0 + }); + } +} + export class LeftMenuGesture extends MenuContentGesture { constructor(menu: Menu) { - super(menu); + super(menu, menu.getContentElement()); } } export class RightMenuGesture extends MenuContentGesture { constructor(menu: Menu) { - super(menu); + super(menu, menu.getContentElement()); } onSlide(slide, ev) { diff --git a/ionic/components/menu/menu.ts b/ionic/components/menu/menu.ts index b4af4e6c56..aac93507f4 100644 --- a/ionic/components/menu/menu.ts +++ b/ionic/components/menu/menu.ts @@ -123,6 +123,7 @@ export class Menu extends Ion { this._gesture = new gestures.LeftMenuGesture(this); break; } + this._targetGesture = new gestures.TargetGesture(this); } _initType(type) { @@ -278,6 +279,7 @@ export class Menu extends Ion { onDestroy() { this.app.unregister(this.id); this._gesture && this._gesture.destroy(); + this._targetGesture && this._targetGesture.destroy(); this._type && this._type.onDestroy(); this._cntEle = null; }