mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-18 19:21:34 +08:00
88 lines
1.9 KiB
TypeScript
88 lines
1.9 KiB
TypeScript
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, targetEl: Element, options = {}) {
|
|
|
|
super(targetEl, util.extend({
|
|
direction: (menu.side === 'left' || menu.side === 'right') ? 'x' : 'y',
|
|
edge: menu.side,
|
|
threshold: 75
|
|
}, options));
|
|
|
|
this.menu = menu;
|
|
this.listen();
|
|
}
|
|
|
|
canStart(ev) {
|
|
return this.menu.isOpen && this.menu.isEnabled ? true : super.canStart(ev);
|
|
}
|
|
|
|
// Set CSS, then wait one frame for it to apply before sliding starts
|
|
onSlideBeforeStart(slide, ev) {
|
|
this.menu.setProgressStart();
|
|
}
|
|
|
|
onSlide(slide, ev) {
|
|
this.menu.setProgess(slide.distance / slide.max);
|
|
}
|
|
|
|
onSlideEnd(slide, ev) {
|
|
let shouldComplete = (Math.abs(ev.velocityX) > 0.2 || Math.abs(slide.delta) > Math.abs(slide.max) * 0.5);
|
|
this.menu.setProgressEnd(shouldComplete);
|
|
}
|
|
|
|
getElementStartPos(slide, ev) {
|
|
return this.menu.isOpen ? slide.max : slide.min;
|
|
}
|
|
|
|
getSlideBoundaries() {
|
|
return {
|
|
min: 0,
|
|
max: this.menu.width()
|
|
};
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 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, menu.getContentElement());
|
|
}
|
|
}
|
|
|
|
export class RightMenuGesture extends MenuContentGesture {
|
|
constructor(menu: Menu) {
|
|
super(menu, menu.getContentElement());
|
|
}
|
|
|
|
onSlide(slide, ev) {
|
|
this.menu.setProgess(slide.distance / slide.min);
|
|
}
|
|
|
|
getElementStartPos(slide, ev) {
|
|
return this.menu.isOpen ? slide.min : slide.max;
|
|
}
|
|
|
|
getSlideBoundaries() {
|
|
return {
|
|
min: -this.menu.width(),
|
|
max: 0
|
|
};
|
|
}
|
|
|
|
}
|