/**
* A event recogniser created to recognise horitzontal swipe movements.
*
* @private
*/
Ext.define('Ext.event.recognizer.HorizontalSwipe', {
extend: 'Ext.event.recognizer.Swipe',
handledEvents: ['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],
y = touch.pageY,
absDeltaY = Math.abs(y - this.startY),
time = e.time,
maxDuration = this.getMaxDuration(),
maxOffset = this.getMaxOffset();
if (time - this.startTime > maxDuration) {
return this.fail(this.self.MAX_DURATION_EXCEEDED);
}
if (absDeltaY > maxOffset) {
return this.fail(this.self.MAX_OFFSET_EXCEEDED);
}
},
onTouchEnd: function(e) {
if (this.onTouchMove(e) !== false) {
var touch = e.changedTouches[0],
x = touch.pageX,
deltaX = x - this.startX,
distance = Math.abs(deltaX),
duration = e.time - this.startTime,
minDistance = this.getMinDistance(),
direction;
if (distance < minDistance) {
return this.fail(this.self.DISTANCE_NOT_ENOUGH);
}
direction = (deltaX < 0) ? 'left' : 'right';
this.fire('swipe', e, [touch], {
touch: touch,
direction: direction,
distance: distance,
duration: duration
});
}
}
});