mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-23 05:58:26 +08:00
perf(menu): improves menu performance and fixes some edge cases
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
import { defaults } from '../util/util';
|
||||
import { defaults, assert } from '../util/util';
|
||||
import { GestureDelegate } from '../gestures/gesture-controller';
|
||||
import { PanRecognizer } from './recognizers';
|
||||
import { PointerEvents, PointerEventsConfig, UIEventManager } from '../util/ui-event-manager';
|
||||
@ -26,7 +26,7 @@ export class PanGesture {
|
||||
private events: UIEventManager = new UIEventManager(false);
|
||||
private pointerEvents: PointerEvents;
|
||||
private detector: PanRecognizer;
|
||||
private started: boolean = false;
|
||||
protected started: boolean = false;
|
||||
private captured: boolean = false;
|
||||
public isListening: boolean = false;
|
||||
protected gestute: GestureDelegate;
|
||||
@ -106,10 +106,10 @@ export class PanGesture {
|
||||
}
|
||||
|
||||
pointerMove(ev: any) {
|
||||
if (!this.started) {
|
||||
return;
|
||||
}
|
||||
this.debouncer.debounce(() => {
|
||||
if (!this.started) {
|
||||
return;
|
||||
}
|
||||
if (this.captured) {
|
||||
this.onDragMove(ev);
|
||||
return;
|
||||
@ -134,11 +134,9 @@ export class PanGesture {
|
||||
}
|
||||
|
||||
pointerUp(ev: any) {
|
||||
assert(this.started, 'started failed');
|
||||
this.debouncer.cancel();
|
||||
|
||||
if (!this.started) {
|
||||
return;
|
||||
}
|
||||
this.gestute && this.gestute.release();
|
||||
|
||||
if (this.captured) {
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { PanGesture } from './drag-gesture';
|
||||
import { clamp } from '../util/util';
|
||||
import { pointerCoord } from '../util/dom';
|
||||
import { clamp, assert } from '../util/util';
|
||||
import { nativeRaf, pointerCoord } from '../util/dom';
|
||||
|
||||
/**
|
||||
* @private
|
||||
@ -49,16 +49,21 @@ export class SlideGesture extends PanGesture {
|
||||
distance: 0,
|
||||
velocity: 0,
|
||||
};
|
||||
let {min, max} = this.getSlideBoundaries(this.slide, ev);
|
||||
this.slide.min = min;
|
||||
this.slide.max = max;
|
||||
this.slide.elementStartPos = this.getElementStartPos(this.slide, ev);
|
||||
|
||||
this.onSlideStart(this.slide, ev);
|
||||
this.started = false;
|
||||
nativeRaf(() => {
|
||||
let {min, max} = this.getSlideBoundaries(this.slide, ev);
|
||||
this.slide.min = min;
|
||||
this.slide.max = max;
|
||||
this.slide.elementStartPos = this.getElementStartPos(this.slide, ev);
|
||||
this.started = true;
|
||||
this.onSlideStart(this.slide, ev);
|
||||
});
|
||||
}
|
||||
|
||||
onDragMove(ev: any) {
|
||||
let slide: SlideData = this.slide;
|
||||
assert(slide.min !== slide.max, 'slide data must be properly initialized');
|
||||
|
||||
let coord = <any>pointerCoord(ev);
|
||||
let newPos = coord[this.direction];
|
||||
let newTimestamp = Date.now();
|
||||
@ -74,8 +79,6 @@ export class SlideGesture extends PanGesture {
|
||||
slide.velocity = velocity;
|
||||
slide.delta = newPos - slide.pointerStartPos;
|
||||
this.onSlide(slide, ev);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
onDragEnd(ev: any) {
|
||||
|
Reference in New Issue
Block a user