Stop ongoing kinetic animation

This commit is contained in:
Frederic Junod
2013-02-19 15:13:29 +01:00
parent 48ff4a95e0
commit 3e4ae0d79d
+16 -4
View File
@@ -6,6 +6,7 @@ goog.require('goog.asserts');
goog.require('ol.Coordinate'); goog.require('ol.Coordinate');
goog.require('ol.Kinetic'); goog.require('ol.Kinetic');
goog.require('ol.Pixel'); goog.require('ol.Pixel');
goog.require('ol.PreRenderFunction');
goog.require('ol.View'); goog.require('ol.View');
goog.require('ol.ViewHint'); goog.require('ol.ViewHint');
goog.require('ol.interaction.Touch'); goog.require('ol.interaction.Touch');
@@ -26,6 +27,12 @@ ol.interaction.TouchPan = function() {
*/ */
this.kinetic_ = new ol.Kinetic(-0.005, 0.05, 100); this.kinetic_ = new ol.Kinetic(-0.005, 0.05, 100);
/**
* @private
* @type {?ol.PreRenderFunction}
*/
this.kineticPreRenderFn_ = null;
/** /**
* @type {ol.Pixel} * @type {ol.Pixel}
*/ */
@@ -43,11 +50,9 @@ ol.interaction.TouchPan.prototype.handleTouchMove = function(mapBrowserEvent) {
var centroid = ol.interaction.Touch.centroid(this.targetTouches); var centroid = ol.interaction.Touch.centroid(this.targetTouches);
if (!goog.isNull(this.lastCentroid)) { if (!goog.isNull(this.lastCentroid)) {
this.kinetic_.update(centroid.x, centroid.y); this.kinetic_.update(centroid.x, centroid.y);
var map = mapBrowserEvent.map;
var view = map.getView();
var deltaX = this.lastCentroid.x - centroid.x; var deltaX = this.lastCentroid.x - centroid.x;
var deltaY = centroid.y - this.lastCentroid.y; var deltaY = centroid.y - this.lastCentroid.y;
var view = mapBrowserEvent.map.getView();
var center = new ol.Coordinate(deltaX, deltaY) var center = new ol.Coordinate(deltaX, deltaY)
.scale(view.getResolution()) .scale(view.getResolution())
.rotate(view.getRotation()) .rotate(view.getRotation())
@@ -71,7 +76,8 @@ ol.interaction.TouchPan.prototype.handleTouchEnd =
var distance = this.kinetic_.getDistance(); var distance = this.kinetic_.getDistance();
var angle = this.kinetic_.getAngle(); var angle = this.kinetic_.getAngle();
var center = view.getCenter(); var center = view.getCenter();
map.addPreRenderFunction(this.kinetic_.pan(center)); this.kineticPreRenderFn_ = this.kinetic_.pan(center);
map.addPreRenderFunction(this.kineticPreRenderFn_);
var centerpx = map.getPixelFromCoordinate(center); var centerpx = map.getPixelFromCoordinate(center);
var destpx = new ol.Pixel( var destpx = new ol.Pixel(
centerpx.x - distance * Math.cos(angle), centerpx.x - distance * Math.cos(angle),
@@ -95,6 +101,12 @@ ol.interaction.TouchPan.prototype.handleTouchStart =
var map = mapBrowserEvent.map; var map = mapBrowserEvent.map;
var view = map.getView(); var view = map.getView();
this.lastCentroid = null; this.lastCentroid = null;
if (!goog.isNull(this.kineticPreRenderFn_) &&
map.removePreRenderFunction(this.kineticPreRenderFn_)) {
map.requestRenderFrame();
view.setCenter(mapBrowserEvent.frameState.view2DState.center);
this.kineticPreRenderFn_ = null;
}
this.kinetic_.begin(); this.kinetic_.begin();
view.setHint(ol.ViewHint.PANNING, 1); view.setHint(ol.ViewHint.PANNING, 1);
return true; return true;