fix(menu): drag menu to close. Fixes #189

This commit is contained in:
Max Lynch
2015-10-29 12:42:12 -05:00
parent 744920949e
commit 196fbe2e01
2 changed files with 20 additions and 5 deletions

View File

@ -1,15 +1,16 @@
import {Menu} from './menu'; import {Menu} from './menu';
import {SlideEdgeGesture} from 'ionic/gestures/slide-edge-gesture'; import {SlideEdgeGesture} from 'ionic/gestures/slide-edge-gesture';
import * as util from 'ionic/util';
class MenuContentGesture extends SlideEdgeGesture { 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', direction: (menu.side === 'left' || menu.side === 'right') ? 'x' : 'y',
edge: menu.side, edge: menu.side,
threshold: 75 threshold: 75
}); }, options));
this.menu = menu; this.menu = menu;
this.listen(); 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 { export class LeftMenuGesture extends MenuContentGesture {
constructor(menu: Menu) { constructor(menu: Menu) {
super(menu); super(menu, menu.getContentElement());
} }
} }
export class RightMenuGesture extends MenuContentGesture { export class RightMenuGesture extends MenuContentGesture {
constructor(menu: Menu) { constructor(menu: Menu) {
super(menu); super(menu, menu.getContentElement());
} }
onSlide(slide, ev) { onSlide(slide, ev) {

View File

@ -123,6 +123,7 @@ export class Menu extends Ion {
this._gesture = new gestures.LeftMenuGesture(this); this._gesture = new gestures.LeftMenuGesture(this);
break; break;
} }
this._targetGesture = new gestures.TargetGesture(this);
} }
_initType(type) { _initType(type) {
@ -278,6 +279,7 @@ export class Menu extends Ion {
onDestroy() { onDestroy() {
this.app.unregister(this.id); this.app.unregister(this.id);
this._gesture && this._gesture.destroy(); this._gesture && this._gesture.destroy();
this._targetGesture && this._targetGesture.destroy();
this._type && this._type.onDestroy(); this._type && this._type.onDestroy();
this._cntEle = null; this._cntEle = null;
} }