/**
* A event recogniser created to recognise vertical swipe movements.
*
* This is disabled by default in Sencha Touch as it has a performance inpect when your application
* has vertical scrollers, plus, in most cases it is not very useful.
*
* If you wish to recognise vertical swipe movements in your application, please refer to the documentation of
* {@link Ext.event.recognizer.Recognizer} and {@link Ext#setup}.
*
* @private
*/
Ext.define('Ext.event.recognizer.VerticalSwipe', {
extend: 'Ext.event.recognizer.Swipe',
onTouchStart: function(e) {
if (this.callParent(arguments) === false) {
return false;
}
var touch = e.changedTouches[0];
this.startTime = e.time;
this.startX = touch.pageX;
this.startY = touch.pageY;
},
onTouchMove: function(e) {
var touch = e.changedTouches[0],
x = touch.pageX,
absDeltaX = Math.abs(x - this.startX),
maxDuration = this.getMaxDuration(),
maxOffset = this.getMaxOffset(),
time = e.time;
if (time - this.startTime > maxDuration) {
return this.fail(this.self.MAX_DURATION_EXCEEDED);
}
if (absDeltaX > maxOffset) {
return this.fail(this.self.MAX_OFFSET_EXCEEDED);
}
},
onTouchEnd: function(e) {
if (this.onTouchMove(e) !== false) {
var touch = e.changedTouches[0],
y = touch.pageY,
deltaY = y - this.startY,
distance = Math.abs(deltaY),
duration = e.time - this.startTime,
minDistance = this.getMinDistance(),
direction;
if (distance < minDistance) {
return this.fail(this.self.DISTANCE_NOT_ENOUGH);
}
direction = (deltaY < 0) ? 'up' : 'down';
this.fire('swipe', e, [touch], {
touch: touch,
distance: distance,
duration: duration,
duration: duration
});
}
}
});