Ext.gesture.Touch = Ext.extend(Ext.gesture.Gesture, {
handles: ['touchstart', 'touchmove', 'touchend', 'touchdown'],
touchDownInterval: 500,
onTouchStart: function(e, touch) {
this.startX = this.previousX = touch.pageX;
this.startY = this.previousY = touch.pageY;
this.startTime = this.previousTime = e.timeStamp;
this.fire('touchstart', e);
this.lastEvent = e;
if (this.listeners.touchdown) {
this.touchDownIntervalId = setInterval(Ext.createDelegate(this.touchDownHandler, this), this.touchDownInterval);
}
},
onTouchMove: function(e, touch) {
this.fire('touchmove', e, this.getInfo(touch));
this.lastEvent = e;
},
onTouchEnd: function(e) {
this.fire('touchend', e, this.lastInfo);
clearInterval(this.touchDownIntervalId);
},
touchDownHandler : function() {
this.fire('touchdown', this.lastEvent, this.lastInfo);
},
getInfo : function(touch) {
var time = Date.now(),
deltaX = touch.pageX - this.startX,
deltaY = touch.pageY - this.startY,
info = {
startX: this.startX,
startY: this.startY,
previousX: this.previousX,
previousY: this.previousY,
pageX: touch.pageX,
pageY: touch.pageY,
deltaX: deltaX,
deltaY: deltaY,
absDeltaX: Math.abs(deltaX),
absDeltaY: Math.abs(deltaY),
previousDeltaX: touch.pageX - this.previousX,
previousDeltaY: touch.pageY - this.previousY,
time: time,
startTime: this.startTime,
previousTime: this.previousTime,
deltaTime: time - this.startTime,
previousDeltaTime: time - this.previousTime
};
this.previousTime = info.time;
this.previousX = info.pageX;
this.previousY = info.pageY;
this.lastInfo = info;
return info;
}
});
Ext.regGesture('touch', Ext.gesture.Touch);