Skip to content

Commit 29791f8

Browse files
manucorporatadamdbradley
authored andcommitted
fix(menu): swiping menu distinguishes between opening and closing direction
Closes #5511
1 parent ce3da97 commit 29791f8

File tree

2 files changed

+32
-10
lines changed

2 files changed

+32
-10
lines changed

src/components/menu/menu-gestures.ts

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -77,21 +77,34 @@ export class MenuContentGesture extends SlideEdgeGesture {
7777
let z = (this.menu.side === 'right' ? slide.min : slide.max);
7878
let stepValue = (slide.distance / z);
7979
console.debug('menu gesture, onSlide', this.menu.side, 'distance', slide.distance, 'min', slide.min, 'max', slide.max, 'z', z, 'stepValue', stepValue);
80-
80+
ev.srcEvent.preventDefault();
81+
ev.preventDefault();
8182
this.menu.swipeProgress(stepValue);
8283
}
8384

8485
onSlideEnd(slide: SlideData, ev: any) {
8586
let z = (this.menu.side === 'right' ? slide.min : slide.max);
86-
87-
let shouldComplete = (Math.abs(ev.velocityX) > 0.2) ||
88-
(Math.abs(slide.delta) > Math.abs(z) * 0.5);
89-
9087
let currentStepValue = (slide.distance / z);
9188

92-
console.debug('menu gesture, onSlide', this.menu.side, 'distance', slide.distance, 'delta', slide.delta, 'velocityX', ev.velocityX, 'min', slide.min, 'max', slide.max, 'shouldComplete', shouldComplete, 'currentStepValue', currentStepValue);
93-
94-
this.menu.swipeEnd(shouldComplete, currentStepValue);
89+
z = Math.abs(z * 0.5);
90+
let shouldCompleteRight = (ev.velocityX >= 0)
91+
&& (ev.velocityX > 0.2 || slide.delta > z);
92+
93+
let shouldCompleteLeft = (ev.velocityX <= 0)
94+
&& (ev.velocityX < -0.2 || slide.delta < -z);
95+
96+
console.debug(
97+
'menu gesture, onSlide', this.menu.side,
98+
'distance', slide.distance,
99+
'delta', slide.delta,
100+
'velocityX', ev.velocityX,
101+
'min', slide.min,
102+
'max', slide.max,
103+
'shouldCompleteLeft', shouldCompleteLeft,
104+
'shouldCompleteRight', shouldCompleteRight,
105+
'currentStepValue', currentStepValue);
106+
107+
this.menu.swipeEnd(shouldCompleteLeft, shouldCompleteRight, currentStepValue);
95108
}
96109

97110
getElementStartPos(slide: SlideData, ev: any) {

src/components/menu/menu.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -459,11 +459,20 @@ export class Menu extends Ion {
459459
/**
460460
* @private
461461
*/
462-
swipeEnd(shouldComplete: boolean, currentStepValue: number) {
462+
swipeEnd(shouldCompleteLeft: boolean, shouldCompleteRight: boolean, stepValue: number) {
463463
// user has finished dragging the menu
464464
if (this._isEnabled && this._isSwipeEnabled) {
465465
this._prevent();
466-
this._getType().setProgressEnd(shouldComplete, currentStepValue, (isOpen: boolean) => {
466+
467+
let opening = !this.isOpen;
468+
let shouldComplete = false;
469+
if (opening) {
470+
shouldComplete = (this.side === 'right') ? shouldCompleteLeft : shouldCompleteRight;
471+
} else {
472+
shouldComplete = (this.side === 'right') ? shouldCompleteRight : shouldCompleteLeft;
473+
}
474+
475+
this._getType().setProgressEnd(shouldComplete, stepValue, (isOpen: boolean) => {
467476
console.debug('menu, swipeEnd', this.side);
468477
this._after(isOpen);
469478
});

0 commit comments

Comments
 (0)