Use view.animate() after drag panning

This commit is contained in:
Tim Schaub
2016-11-05 18:05:44 -06:00
parent c452164b8a
commit 61ef7bf95d
+8 -15
View File
@@ -3,6 +3,7 @@ goog.provide('ol.interaction.DragPan');
goog.require('ol'); goog.require('ol');
goog.require('ol.View'); goog.require('ol.View');
goog.require('ol.coordinate'); goog.require('ol.coordinate');
goog.require('ol.easing');
goog.require('ol.events.condition'); goog.require('ol.events.condition');
goog.require('ol.functions'); goog.require('ol.functions');
goog.require('ol.interaction.Pointer'); goog.require('ol.interaction.Pointer');
@@ -33,12 +34,6 @@ ol.interaction.DragPan = function(opt_options) {
*/ */
this.kinetic_ = options.kinetic; this.kinetic_ = options.kinetic;
/**
* @private
* @type {?ol.PreRenderFunction}
*/
this.kineticPreRenderFn_ = null;
/** /**
* @type {ol.Pixel} * @type {ol.Pixel}
*/ */
@@ -105,15 +100,16 @@ ol.interaction.DragPan.handleUpEvent_ = function(mapBrowserEvent) {
var distance = this.kinetic_.getDistance(); var distance = this.kinetic_.getDistance();
var angle = this.kinetic_.getAngle(); var angle = this.kinetic_.getAngle();
var center = /** @type {!ol.Coordinate} */ (view.getCenter()); var center = /** @type {!ol.Coordinate} */ (view.getCenter());
this.kineticPreRenderFn_ = this.kinetic_.pan(center);
map.beforeRender(this.kineticPreRenderFn_);
var centerpx = map.getPixelFromCoordinate(center); var centerpx = map.getPixelFromCoordinate(center);
var dest = map.getCoordinateFromPixel([ var dest = map.getCoordinateFromPixel([
centerpx[0] - distance * Math.cos(angle), centerpx[0] - distance * Math.cos(angle),
centerpx[1] - distance * Math.sin(angle) centerpx[1] - distance * Math.sin(angle)
]); ]);
dest = view.constrainCenter(dest); view.animate({
view.setCenter(dest); center: view.constrainCenter(dest),
duration: 500,
easing: ol.easing.easeOut
});
} else { } else {
// the view is not updated, force a render // the view is not updated, force a render
map.render(); map.render();
@@ -141,11 +137,8 @@ ol.interaction.DragPan.handleDownEvent_ = function(mapBrowserEvent) {
if (!this.handlingDownUpSequence) { if (!this.handlingDownUpSequence) {
view.setHint(ol.View.Hint.INTERACTING, 1); view.setHint(ol.View.Hint.INTERACTING, 1);
} }
if (this.kineticPreRenderFn_ && // stop any current animation
map.removePreRenderFunction(this.kineticPreRenderFn_)) { view.setCenter(mapBrowserEvent.frameState.viewState.center);
view.setCenter(mapBrowserEvent.frameState.viewState.center);
this.kineticPreRenderFn_ = null;
}
if (this.kinetic_) { if (this.kinetic_) {
this.kinetic_.begin(); this.kinetic_.begin();
} }