ionic-angular-acoreyj
Version:
A powerful framework for building mobile and progressive web apps with JavaScript and Angular
86 lines • 2.86 kB
JavaScript
import { GESTURE_MENU_SWIPE, GESTURE_PRIORITY_MENU_SWIPE } from '../../gestures/gesture-controller';
import { SlideEdgeGesture } from '../../gestures/slide-edge-gesture';
/**
* Gesture attached to the content which the menu is assigned to
*/
export class MenuContentGesture extends SlideEdgeGesture {
constructor(plt, menu, gestureCtrl, domCtrl) {
super(plt, plt.doc().body, {
direction: 'x',
edge: menu.side,
threshold: 5,
maxEdgeStart: menu.maxEdgeStart || 50,
zone: false,
passive: true,
domController: domCtrl,
gesture: gestureCtrl.createGesture({
name: GESTURE_MENU_SWIPE,
priority: GESTURE_PRIORITY_MENU_SWIPE,
disableScroll: true
})
});
this.menu = menu;
}
canStart(ev) {
const menu = this.menu;
if (!menu.canSwipe()) {
return false;
}
if (menu.isOpen) {
return true;
}
else if (menu.getMenuController().getOpen()) {
return false;
}
return super.canStart(ev);
}
// Set CSS, then wait one frame for it to apply before sliding starts
onSlideBeforeStart() {
(void 0) /* console.debug */;
this.menu._swipeBeforeStart();
}
onSlideStart() {
(void 0) /* console.debug */;
this.menu._swipeStart();
}
onSlide(slide) {
const z = (this.menu.isRightSide !== this.plt.isRTL ? slide.min : slide.max);
const stepValue = (slide.distance / z);
this.menu._swipeProgress(stepValue);
}
onSlideEnd(slide) {
let z = (this.menu.isRightSide !== this.plt.isRTL ? slide.min : slide.max);
const currentStepValue = (slide.distance / z);
const velocity = slide.velocity;
z = Math.abs(z * 0.5);
const shouldCompleteRight = (velocity >= 0)
&& (velocity > 0.2 || slide.delta > z);
const shouldCompleteLeft = (velocity <= 0)
&& (velocity < -0.2 || slide.delta < -z);
(void 0) /* console.debug */;
this.menu._swipeEnd(shouldCompleteLeft, shouldCompleteRight, currentStepValue, velocity);
}
getElementStartPos(slide) {
const menu = this.menu;
if (menu.isRightSide !== this.plt.isRTL) {
return menu.isOpen ? slide.min : slide.max;
}
// left menu
return menu.isOpen ? slide.max : slide.min;
}
getSlideBoundaries() {
const menu = this.menu;
if (menu.isRightSide !== this.plt.isRTL) {
return {
min: -menu.width(),
max: 0
};
}
// left menu
return {
min: 0,
max: menu.width()
};
}
}
//# sourceMappingURL=menu-gestures.js.map