Fixing the way we prevent the extra click.
This commit is contained in:
+11
-9
@@ -3,6 +3,7 @@ goog.provide('ol.event.Drag');
|
|||||||
goog.require('ol.event');
|
goog.require('ol.event');
|
||||||
goog.require('ol.event.ISequence');
|
goog.require('ol.event.ISequence');
|
||||||
|
|
||||||
|
goog.require('goog.functions');
|
||||||
goog.require('goog.fx.Dragger');
|
goog.require('goog.fx.Dragger');
|
||||||
goog.require('goog.fx.DragEvent');
|
goog.require('goog.fx.DragEvent');
|
||||||
goog.require('goog.fx.Dragger.EventType');
|
goog.require('goog.fx.Dragger.EventType');
|
||||||
@@ -30,11 +31,9 @@ ol.event.Drag = function(target) {
|
|||||||
this.dragger_ = dragger;
|
this.dragger_ = dragger;
|
||||||
|
|
||||||
// We want to swallow the click event that gets fired after dragging.
|
// We want to swallow the click event that gets fired after dragging.
|
||||||
var stopClickRegistered = false;
|
var newSequence;
|
||||||
function stopClick() {
|
function unregisterClickStopper() {
|
||||||
target.unregister('click', stopClick, undefined, true);
|
target.unregister('click', goog.functions.FALSE, undefined, true);
|
||||||
stopClickRegistered = false;
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dragger.defaultAction = function(x, y) {};
|
dragger.defaultAction = function(x, y) {};
|
||||||
@@ -43,6 +42,7 @@ ol.event.Drag = function(target) {
|
|||||||
evt.type = 'dragstart';
|
evt.type = 'dragstart';
|
||||||
previousX = evt.clientX;
|
previousX = evt.clientX;
|
||||||
previousY = evt.clientY;
|
previousY = evt.clientY;
|
||||||
|
newSequence = true;
|
||||||
target.triggerEvent(evt.type, evt);
|
target.triggerEvent(evt.type, evt);
|
||||||
});
|
});
|
||||||
dragger.addEventListener(goog.fx.Dragger.EventType.DRAG, function(evt) {
|
dragger.addEventListener(goog.fx.Dragger.EventType.DRAG, function(evt) {
|
||||||
@@ -51,12 +51,12 @@ ol.event.Drag = function(target) {
|
|||||||
evt.deltaY = evt.clientY - previousY;
|
evt.deltaY = evt.clientY - previousY;
|
||||||
previousX = evt.clientX;
|
previousX = evt.clientX;
|
||||||
previousY = evt.clientY;
|
previousY = evt.clientY;
|
||||||
if (!stopClickRegistered) {
|
if (newSequence) {
|
||||||
// Once we are in the drag sequence, we know that we need to
|
// Once we are in the drag sequence, we know that we need to
|
||||||
// get rid of the click event that gets fired when we are done
|
// get rid of the click event that gets fired when we are done
|
||||||
// dragging.
|
// dragging.
|
||||||
target.register('click', stopClick, undefined, true);
|
target.register('click', goog.functions.FALSE, undefined, true);
|
||||||
stopClickRegistered = true;
|
newSequence = false;
|
||||||
}
|
}
|
||||||
target.triggerEvent(evt.type, evt);
|
target.triggerEvent(evt.type, evt);
|
||||||
});
|
});
|
||||||
@@ -64,10 +64,12 @@ ol.event.Drag = function(target) {
|
|||||||
evt.target = element;
|
evt.target = element;
|
||||||
evt.type = 'dragend';
|
evt.type = 'dragend';
|
||||||
target.triggerEvent(evt.type, evt);
|
target.triggerEvent(evt.type, evt);
|
||||||
|
// Unregister the click stopper in the next cycle
|
||||||
|
window.setTimeout(unregisterClickStopper, 0);
|
||||||
});
|
});
|
||||||
// Don't swallow the click event if our sequence cancels early.
|
// Don't swallow the click event if our sequence cancels early.
|
||||||
dragger.addEventListener(
|
dragger.addEventListener(
|
||||||
goog.fx.Dragger.EventType.EARLY_CANCEL, stopClick
|
goog.fx.Dragger.EventType.EARLY_CANCEL, unregisterClickStopper
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user