perf(menu): improves menu performance and fixes some edge cases

This commit is contained in:
Manu Mtz.-Almeida
2016-11-25 22:51:37 +01:00
parent b515f5251b
commit 320989540e
8 changed files with 68 additions and 31 deletions

View File

@ -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) {

View File

@ -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) {