the drag handler moves the map by default
This commit is contained in:
@@ -37,7 +37,7 @@ ol.control.Navigation.prototype.activate = function() {
|
|||||||
// give other, higher-level, controls a chance to stop the
|
// give other, higher-level, controls a chance to stop the
|
||||||
// navigation control.
|
// navigation control.
|
||||||
var target = this.map_.getParentEventTarget();
|
var target = this.map_.getParentEventTarget();
|
||||||
goog.events.listen(target, 'drag', this.moveMap, false, this);
|
//goog.events.listen(target, 'drag', this.moveMap, false, this);
|
||||||
goog.events.listen(target, 'mousewheel', this.zoomMap, false, this);
|
goog.events.listen(target, 'mousewheel', this.zoomMap, false, this);
|
||||||
}
|
}
|
||||||
return active;
|
return active;
|
||||||
@@ -48,7 +48,7 @@ ol.control.Navigation.prototype.deactivate = function() {
|
|||||||
var inactive = goog.base(this, 'deactivate');
|
var inactive = goog.base(this, 'deactivate');
|
||||||
if (inactive) {
|
if (inactive) {
|
||||||
var target = this.map_.getParentEventTarget();
|
var target = this.map_.getParentEventTarget();
|
||||||
goog.events.unlisten(target, 'drag', this.moveMap, false, this);
|
//goog.events.unlisten(target, 'drag', this.moveMap, false, this);
|
||||||
goog.events.unlisten(target, 'mousewheel', this.zoomMap, false, this);
|
goog.events.unlisten(target, 'mousewheel', this.zoomMap, false, this);
|
||||||
}
|
}
|
||||||
return inactive;
|
return inactive;
|
||||||
|
|||||||
+96
-47
@@ -7,10 +7,12 @@
|
|||||||
|
|
||||||
goog.provide('ol.handler.Drag');
|
goog.provide('ol.handler.Drag');
|
||||||
|
|
||||||
goog.require('goog.fx.Dragger');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.events');
|
goog.require('goog.events');
|
||||||
|
goog.require('goog.events.Event');
|
||||||
goog.require('goog.events.EventType');
|
goog.require('goog.events.EventType');
|
||||||
goog.require('goog.Disposable');
|
goog.require('goog.Disposable');
|
||||||
|
goog.require('goog.fx.Dragger');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
@@ -20,59 +22,106 @@ goog.require('goog.Disposable');
|
|||||||
*/
|
*/
|
||||||
ol.handler.Drag = function(map, elt) {
|
ol.handler.Drag = function(map, elt) {
|
||||||
|
|
||||||
var dragger = new goog.fx.Dragger(elt);
|
/** */
|
||||||
|
this.map_ = map;
|
||||||
|
|
||||||
|
/** */
|
||||||
|
this.elt_ = elt;
|
||||||
|
|
||||||
|
/** */
|
||||||
|
var dragger = this.dragger_ = new goog.fx.Dragger(elt);
|
||||||
dragger.defaultAction = function() {};
|
dragger.defaultAction = function() {};
|
||||||
|
|
||||||
this.registerDisposable(dragger);
|
/** */
|
||||||
|
this.prevX_ = 0;
|
||||||
|
|
||||||
var touchmove = goog.events.EventType.TOUCHMOVE,
|
/** */
|
||||||
mousemove = goog.events.EventType.MOUSEMOVE;
|
this.prevY_ = 0;
|
||||||
|
|
||||||
var prevX = 0, prevY = 0;
|
|
||||||
|
|
||||||
var preventDefault = function(e) { e.preventDefault(); };
|
|
||||||
|
|
||||||
var handleDragStart = function(e) {
|
|
||||||
prevX = e.clientX;
|
|
||||||
prevY = e.clientY;
|
|
||||||
var newE = {
|
|
||||||
type: 'dragstart'
|
|
||||||
};
|
|
||||||
goog.events.dispatchEvent(map, newE);
|
|
||||||
// this to prevent page scrolling
|
|
||||||
goog.events.listen(elt, [touchmove, mousemove], preventDefault);
|
|
||||||
};
|
|
||||||
|
|
||||||
var handleDrag = function(e) {
|
|
||||||
var newE = {
|
|
||||||
type: 'drag',
|
|
||||||
deltaX: e.clientX - prevX,
|
|
||||||
deltaY: e.clientY - prevY
|
|
||||||
};
|
|
||||||
prevX = e.clientX;
|
|
||||||
prevY = e.clientY;
|
|
||||||
goog.events.dispatchEvent(map, newE);
|
|
||||||
};
|
|
||||||
|
|
||||||
var handleDragEnd = function(e) {
|
|
||||||
var newE = {
|
|
||||||
type: 'dragend'
|
|
||||||
};
|
|
||||||
goog.events.dispatchEvent(map, newE);
|
|
||||||
goog.events.unlisten(elt, [touchmove, mousemove], preventDefault);
|
|
||||||
};
|
|
||||||
|
|
||||||
var handleDragEarlyCancel = function(e) {
|
|
||||||
goog.events.unlisten(elt, [touchmove, mousemove], preventDefault);
|
|
||||||
};
|
|
||||||
|
|
||||||
goog.events.listen(dragger, goog.fx.Dragger.EventType.START,
|
goog.events.listen(dragger, goog.fx.Dragger.EventType.START,
|
||||||
handleDragStart, false, this);
|
this.handleDragStart, false, this);
|
||||||
goog.events.listen(dragger, goog.fx.Dragger.EventType.DRAG,
|
goog.events.listen(dragger, goog.fx.Dragger.EventType.DRAG,
|
||||||
handleDrag, false, this);
|
this.handleDrag, false, this);
|
||||||
goog.events.listen(dragger, goog.fx.Dragger.EventType.END,
|
goog.events.listen(dragger, goog.fx.Dragger.EventType.END,
|
||||||
handleDragEnd, false, this);
|
this.handleDragEnd, false, this);
|
||||||
goog.events.listen(dragger, goog.fx.Dragger.EventType.EARLY_CANCEL,
|
goog.events.listen(dragger, goog.fx.Dragger.EventType.EARLY_CANCEL,
|
||||||
handleDragEarlyCancel, false, this);
|
this.handleDragEarlyCancel, false, this);
|
||||||
|
|
||||||
};
|
};
|
||||||
goog.inherits(ol.handler.Drag, goog.Disposable);
|
goog.inherits(ol.handler.Drag, goog.Disposable);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
ol.handler.Drag.prototype.disposeInternal = function() {
|
||||||
|
goog.base(this, 'disposeInternal');
|
||||||
|
goog.dispose(this.dragger_);
|
||||||
|
goog.events.unlisten(this.elt_,
|
||||||
|
[goog.events.EventType.TOUCHMOVE,
|
||||||
|
goog.events.EventType.MOUSEMOVE],
|
||||||
|
goog.events.Event.preventDefault, false, this);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
ol.handler.Drag.prototype.handleDragStart = function(e) {
|
||||||
|
this.dragged_ = false;
|
||||||
|
this.prevX_ = e.clientX;
|
||||||
|
this.prevY_ = e.clientY;
|
||||||
|
var newE = {
|
||||||
|
type: 'dragstart'
|
||||||
|
};
|
||||||
|
goog.events.dispatchEvent(this.map_, newE);
|
||||||
|
|
||||||
|
// this is to prevent page scrolling
|
||||||
|
goog.events.listen(this.elt_,
|
||||||
|
[goog.events.EventType.TOUCHMOVE,
|
||||||
|
goog.events.EventType.MOUSEMOVE],
|
||||||
|
goog.events.Event.preventDefault, false, this);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
ol.handler.Drag.prototype.handleDrag = function(e) {
|
||||||
|
this.dragged_ = true;
|
||||||
|
var newE = {
|
||||||
|
type: 'drag',
|
||||||
|
deltaX: e.clientX - this.prevX_,
|
||||||
|
deltaY: e.clientY - this.prevY_
|
||||||
|
};
|
||||||
|
this.prevX_ = e.clientX;
|
||||||
|
this.prevY_ = e.clientY;
|
||||||
|
var rt = goog.events.dispatchEvent(this.map_, newE);
|
||||||
|
if (rt) {
|
||||||
|
this.defaultBehavior(newE);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
ol.handler.Drag.prototype.handleDragEnd = function(e) {
|
||||||
|
var newE = {
|
||||||
|
type: 'dragend'
|
||||||
|
};
|
||||||
|
goog.events.dispatchEvent(this.map_, newE);
|
||||||
|
goog.events.unlisten(this.elt_,
|
||||||
|
[goog.events.EventType.TOUCHMOVE,
|
||||||
|
goog.events.EventType.MOUSEMOVE],
|
||||||
|
goog.events.Event.preventDefault, false, this);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
ol.handler.Drag.prototype.handleDragEarlyCancel = function(e) {
|
||||||
|
goog.events.unlisten(this.elt_,
|
||||||
|
[goog.events.EventType.TOUCHMOVE,
|
||||||
|
goog.events.EventType.MOUSEMOVE],
|
||||||
|
goog.events.Event.preventDefault, false, this);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
ol.handler.Drag.prototype.defaultBehavior = function(e) {
|
||||||
|
this.map_.moveByViewportPx(e.deltaX, e.deltaY);
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user