Ext.gesture.Drag = Ext.extend(Ext.gesture.Touch, { handles: ['dragstart', 'drag', 'dragend'], dragThreshold: 5, direction: 'both', horizontal: false, vertical: false, constructor: function() { Ext.gesture.Drag.superclass.constructor.apply(this, arguments); if (this.direction == 'both') { this.horizontal = true; this.vertical = true; } else if (this.direction == 'horizontal') { this.horizontal = true; } else { this.vertical = true; } return this; }, onTouchStart: function(e, touch) { this.startX = this.previousX = touch.pageX; this.startY = this.previousY = touch.pageY; this.startTime = this.previousTime = e.timeStamp; this.dragging = false; }, onTouchMove: function(e, touch) { if (this.isLocked('drag')) { return; } var info = this.getInfo(touch); if (!this.dragging) { if (this.isDragging(info) && this.fire('dragstart', e, info)) { this.dragging = true; this.lock('drag', 'dragstart', 'dragend'); } } else { this.fire('drag', e, info); } }, onTouchEnd: function(e) { if (this.dragging) { this.fire('dragend', e, this.lastInfo); } this.dragging = false; }, isDragging: function(info) { return ( (this.horizontal && info.absDeltaX >= this.dragThreshold) || (this.vertical && info.absDeltaY >= this.dragThreshold) ); }, /** * Method to determine whether this Sortable is currently disabled. * @return {Boolean} the disabled state of this Sortable. */ isVertical: function() { return this.vertical; }, /** * Method to determine whether this Sortable is currently sorting. * @return {Boolean} the sorting state of this Sortable. */ isHorizontal: function() { return this.horizontal; } }); Ext.regGesture('drag', Ext.gesture.Drag);