Merge pull request #1100 from twpayne/animation-duration-control
Animation duration control
This commit is contained in:
@@ -217,6 +217,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {Object} ol.control.ZoomOptions
|
* @typedef {Object} ol.control.ZoomOptions
|
||||||
|
* @property {number|undefined} duration Animation duration. Default is 250ms.
|
||||||
* @property {string|undefined} className CSS class name. Default is `ol-zoom`.
|
* @property {string|undefined} className CSS class name. Default is `ol-zoom`.
|
||||||
* @property {number|undefined} delta The zoom delta applied on each click.
|
* @property {number|undefined} delta The zoom delta applied on each click.
|
||||||
* @property {Element|undefined} target Target.
|
* @property {Element|undefined} target Target.
|
||||||
@@ -239,6 +240,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {Object} ol.interaction.DoubleClickZoomOptions
|
* @typedef {Object} ol.interaction.DoubleClickZoomOptions
|
||||||
|
* @property {number|undefined} duration Animation duration. Default is 250ms.
|
||||||
* @property {number|undefined} delta The zoom delta applied on each double
|
* @property {number|undefined} delta The zoom delta applied on each double
|
||||||
* click, default is 1.
|
* click, default is 1.
|
||||||
*/
|
*/
|
||||||
@@ -291,6 +293,7 @@
|
|||||||
* @property {boolean|undefined} touchRotate Whether touch rotate is desired.
|
* @property {boolean|undefined} touchRotate Whether touch rotate is desired.
|
||||||
* @property {boolean|undefined} touchZoom Whether touch zoom is desired.
|
* @property {boolean|undefined} touchZoom Whether touch zoom is desired.
|
||||||
* @property {number|undefined} zoomDelta Zoom delta.
|
* @property {number|undefined} zoomDelta Zoom delta.
|
||||||
|
* @property {number|undefined} zoomDuration Zoom duration.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -304,12 +307,18 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {Object} ol.interaction.KeyboardZoomOptions
|
* @typedef {Object} ol.interaction.KeyboardZoomOptions
|
||||||
|
* @property {number|undefined} duration Animation duration. Default is 100ms.
|
||||||
* @property {ol.interaction.ConditionType|undefined} condition A conditional
|
* @property {ol.interaction.ConditionType|undefined} condition A conditional
|
||||||
* modifier (i.e. Shift key) that determines if the interaction is active
|
* modifier (i.e. Shift key) that determines if the interaction is active
|
||||||
* or not, default is no modifiers.
|
* or not, default is no modifiers.
|
||||||
* @property {number|undefined} delta The amount to zoom on each key press.
|
* @property {number|undefined} delta The amount to zoom on each key press.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} ol.interaction.MouseWheelZoomOptions
|
||||||
|
* @property {number|undefined} duration Animation duration. Default is 250ms.
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {Object} ol.interaction.SelectOptions
|
* @typedef {Object} ol.interaction.SelectOptions
|
||||||
* @property {ol.interaction.ConditionType|undefined} addCondition A conditional
|
* @property {ol.interaction.ConditionType|undefined} addCondition A conditional
|
||||||
@@ -335,6 +344,11 @@
|
|||||||
* @property {number|undefined} threshold Minimal angle to start a rotation.
|
* @property {number|undefined} threshold Minimal angle to start a rotation.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} ol.interaction.TouchZoomOptions
|
||||||
|
* @property {number|undefined} duration Animation duration. Default is 400ms.
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {Object} ol.layer.BaseOptions
|
* @typedef {Object} ol.layer.BaseOptions
|
||||||
* @property {number|undefined} brightness Brightness.
|
* @property {number|undefined} brightness Brightness.
|
||||||
|
|||||||
@@ -12,12 +12,6 @@ goog.require('ol.css');
|
|||||||
goog.require('ol.easing');
|
goog.require('ol.easing');
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @define {number} Zoom duration.
|
|
||||||
*/
|
|
||||||
ol.control.ZOOM_DURATION = 250;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new control with 2 buttons, one for zoom in and one for zoom out.
|
* Create a new control with 2 buttons, one for zoom in and one for zoom out.
|
||||||
@@ -62,6 +56,12 @@ ol.control.Zoom = function(opt_options) {
|
|||||||
target: options.target
|
target: options.target
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {number}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
this.duration_ = goog.isDef(options.duration) ? options.duration : 250;
|
||||||
|
|
||||||
};
|
};
|
||||||
goog.inherits(ol.control.Zoom, ol.control.Control);
|
goog.inherits(ol.control.Zoom, ol.control.Control);
|
||||||
|
|
||||||
@@ -79,11 +79,13 @@ ol.control.Zoom.prototype.zoomByDelta_ = function(delta, browserEvent) {
|
|||||||
var view = map.getView().getView2D();
|
var view = map.getView().getView2D();
|
||||||
var currentResolution = view.getResolution();
|
var currentResolution = view.getResolution();
|
||||||
if (goog.isDef(currentResolution)) {
|
if (goog.isDef(currentResolution)) {
|
||||||
map.beforeRender(ol.animation.zoom({
|
if (this.duration_ > 0) {
|
||||||
resolution: currentResolution,
|
map.beforeRender(ol.animation.zoom({
|
||||||
duration: ol.control.ZOOM_DURATION,
|
resolution: currentResolution,
|
||||||
easing: ol.easing.easeOut
|
duration: this.duration_,
|
||||||
}));
|
easing: ol.easing.easeOut
|
||||||
|
}));
|
||||||
|
}
|
||||||
var newResolution = view.constrainResolution(currentResolution, delta);
|
var newResolution = view.constrainResolution(currentResolution, delta);
|
||||||
view.setResolution(newResolution);
|
view.setResolution(newResolution);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,12 +8,6 @@ goog.require('ol.MapBrowserEvent.EventType');
|
|||||||
goog.require('ol.interaction.Interaction');
|
goog.require('ol.interaction.Interaction');
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @define {number} Animation duration.
|
|
||||||
*/
|
|
||||||
ol.interaction.DOUBLECLICKZOOM_ANIMATION_DURATION = 250;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows the user to zoom by double-clicking on the map.
|
* Allows the user to zoom by double-clicking on the map.
|
||||||
@@ -34,6 +28,12 @@ ol.interaction.DoubleClickZoom = function(opt_options) {
|
|||||||
|
|
||||||
goog.base(this);
|
goog.base(this);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.duration_ = goog.isDef(options.duration) ? options.duration : 250;
|
||||||
|
|
||||||
};
|
};
|
||||||
goog.inherits(ol.interaction.DoubleClickZoom, ol.interaction.Interaction);
|
goog.inherits(ol.interaction.DoubleClickZoom, ol.interaction.Interaction);
|
||||||
|
|
||||||
@@ -52,8 +52,8 @@ ol.interaction.DoubleClickZoom.prototype.handleMapBrowserEvent =
|
|||||||
var delta = browserEvent.shiftKey ? -this.delta_ : this.delta_;
|
var delta = browserEvent.shiftKey ? -this.delta_ : this.delta_;
|
||||||
// FIXME works for View2D only
|
// FIXME works for View2D only
|
||||||
var view = map.getView().getView2D();
|
var view = map.getView().getView2D();
|
||||||
ol.interaction.Interaction.zoomByDelta(map, view, delta, anchor,
|
ol.interaction.Interaction.zoomByDelta(
|
||||||
ol.interaction.DOUBLECLICKZOOM_ANIMATION_DURATION);
|
map, view, delta, anchor, this.duration_);
|
||||||
mapBrowserEvent.preventDefault();
|
mapBrowserEvent.preventDefault();
|
||||||
stopEvent = true;
|
stopEvent = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ ol.interaction.Interaction.pan = function(
|
|||||||
map, view, delta, opt_duration) {
|
map, view, delta, opt_duration) {
|
||||||
var currentCenter = view.getCenter();
|
var currentCenter = view.getCenter();
|
||||||
if (goog.isDef(currentCenter)) {
|
if (goog.isDef(currentCenter)) {
|
||||||
if (goog.isDef(opt_duration)) {
|
if (goog.isDef(opt_duration) && opt_duration > 0) {
|
||||||
map.beforeRender(ol.animation.pan({
|
map.beforeRender(ol.animation.pan({
|
||||||
source: currentCenter,
|
source: currentCenter,
|
||||||
duration: opt_duration,
|
duration: opt_duration,
|
||||||
@@ -77,7 +77,7 @@ ol.interaction.Interaction.rotateWithoutConstraints =
|
|||||||
var currentRotation = view.getRotation();
|
var currentRotation = view.getRotation();
|
||||||
var currentCenter = view.getCenter();
|
var currentCenter = view.getCenter();
|
||||||
if (goog.isDef(currentRotation) && goog.isDef(currentCenter) &&
|
if (goog.isDef(currentRotation) && goog.isDef(currentCenter) &&
|
||||||
goog.isDef(opt_duration)) {
|
goog.isDef(opt_duration) && opt_duration > 0) {
|
||||||
map.beforeRender(ol.animation.rotate({
|
map.beforeRender(ol.animation.rotate({
|
||||||
rotation: currentRotation,
|
rotation: currentRotation,
|
||||||
duration: opt_duration,
|
duration: opt_duration,
|
||||||
@@ -156,7 +156,7 @@ ol.interaction.Interaction.zoomWithoutConstraints =
|
|||||||
var currentResolution = view.getResolution();
|
var currentResolution = view.getResolution();
|
||||||
var currentCenter = view.getCenter();
|
var currentCenter = view.getCenter();
|
||||||
if (goog.isDef(currentResolution) && goog.isDef(currentCenter) &&
|
if (goog.isDef(currentResolution) && goog.isDef(currentCenter) &&
|
||||||
goog.isDef(opt_duration)) {
|
goog.isDef(opt_duration) && opt_duration > 0) {
|
||||||
map.beforeRender(ol.animation.zoom({
|
map.beforeRender(ol.animation.zoom({
|
||||||
resolution: currentResolution,
|
resolution: currentResolution,
|
||||||
duration: opt_duration,
|
duration: opt_duration,
|
||||||
|
|||||||
@@ -45,7 +45,8 @@ ol.interaction.defaults = function(opt_options) {
|
|||||||
options.doubleClickZoom : true;
|
options.doubleClickZoom : true;
|
||||||
if (doubleClickZoom) {
|
if (doubleClickZoom) {
|
||||||
interactions.push(new ol.interaction.DoubleClickZoom({
|
interactions.push(new ol.interaction.DoubleClickZoom({
|
||||||
delta: options.zoomDelta
|
delta: options.zoomDelta,
|
||||||
|
duration: options.zoomDuration
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,7 +67,9 @@ ol.interaction.defaults = function(opt_options) {
|
|||||||
var touchZoom = goog.isDef(options.touchZoom) ?
|
var touchZoom = goog.isDef(options.touchZoom) ?
|
||||||
options.touchZoom : true;
|
options.touchZoom : true;
|
||||||
if (touchZoom) {
|
if (touchZoom) {
|
||||||
interactions.push(new ol.interaction.TouchZoom());
|
interactions.push(new ol.interaction.TouchZoom({
|
||||||
|
duration: options.zoomDuration
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
var dragPan = goog.isDef(options.dragPan) ?
|
var dragPan = goog.isDef(options.dragPan) ?
|
||||||
@@ -82,14 +85,17 @@ ol.interaction.defaults = function(opt_options) {
|
|||||||
if (keyboard) {
|
if (keyboard) {
|
||||||
interactions.push(new ol.interaction.KeyboardPan());
|
interactions.push(new ol.interaction.KeyboardPan());
|
||||||
interactions.push(new ol.interaction.KeyboardZoom({
|
interactions.push(new ol.interaction.KeyboardZoom({
|
||||||
delta: options.zoomDelta
|
delta: options.zoomDelta,
|
||||||
|
duration: options.zoomDuration
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
var mouseWheelZoom = goog.isDef(options.mouseWheelZoom) ?
|
var mouseWheelZoom = goog.isDef(options.mouseWheelZoom) ?
|
||||||
options.mouseWheelZoom : true;
|
options.mouseWheelZoom : true;
|
||||||
if (mouseWheelZoom) {
|
if (mouseWheelZoom) {
|
||||||
interactions.push(new ol.interaction.MouseWheelZoom());
|
interactions.push(new ol.interaction.MouseWheelZoom({
|
||||||
|
duration: options.zoomDuration
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
var shiftDragZoom = goog.isDef(options.shiftDragZoom) ?
|
var shiftDragZoom = goog.isDef(options.shiftDragZoom) ?
|
||||||
|
|||||||
@@ -9,12 +9,6 @@ goog.require('ol.interaction.Interaction');
|
|||||||
goog.require('ol.interaction.condition');
|
goog.require('ol.interaction.condition');
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @define {number} Zoom duration.
|
|
||||||
*/
|
|
||||||
ol.interaction.KEYBOARD_ZOOM_DURATION = 100;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows the user to zoom the map using keyboard + and -.
|
* Allows the user to zoom the map using keyboard + and -.
|
||||||
@@ -41,6 +35,12 @@ ol.interaction.KeyboardZoom = function(opt_options) {
|
|||||||
*/
|
*/
|
||||||
this.delta_ = goog.isDef(options.delta) ? options.delta : 1;
|
this.delta_ = goog.isDef(options.delta) ? options.delta : 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.duration_ = goog.isDef(options.duration) ? options.duration : 100;
|
||||||
|
|
||||||
};
|
};
|
||||||
goog.inherits(ol.interaction.KeyboardZoom, ol.interaction.Interaction);
|
goog.inherits(ol.interaction.KeyboardZoom, ol.interaction.Interaction);
|
||||||
|
|
||||||
@@ -62,8 +62,8 @@ ol.interaction.KeyboardZoom.prototype.handleMapBrowserEvent =
|
|||||||
map.requestRenderFrame();
|
map.requestRenderFrame();
|
||||||
// FIXME works for View2D only
|
// FIXME works for View2D only
|
||||||
var view = map.getView().getView2D();
|
var view = map.getView().getView2D();
|
||||||
ol.interaction.Interaction.zoomByDelta(map, view, delta, undefined,
|
ol.interaction.Interaction.zoomByDelta(
|
||||||
ol.interaction.KEYBOARD_ZOOM_DURATION);
|
map, view, delta, undefined, this.duration_);
|
||||||
mapBrowserEvent.preventDefault();
|
mapBrowserEvent.preventDefault();
|
||||||
stopEvent = true;
|
stopEvent = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,12 +10,6 @@ goog.require('ol.Coordinate');
|
|||||||
goog.require('ol.interaction.Interaction');
|
goog.require('ol.interaction.Interaction');
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @define {number} Animation duration.
|
|
||||||
*/
|
|
||||||
ol.interaction.MOUSEWHEELZOOM_ANIMATION_DURATION = 250;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @define {number} Maximum delta.
|
* @define {number} Maximum delta.
|
||||||
*/
|
*/
|
||||||
@@ -33,8 +27,11 @@ ol.interaction.MOUSEWHEELZOOM_TIMEOUT_DURATION = 80;
|
|||||||
* Allows the user to zoom the map by scrolling the mouse wheel.
|
* Allows the user to zoom the map by scrolling the mouse wheel.
|
||||||
* @constructor
|
* @constructor
|
||||||
* @extends {ol.interaction.Interaction}
|
* @extends {ol.interaction.Interaction}
|
||||||
|
* @param {ol.interaction.MouseWheelZoomOptions=} opt_options Options.
|
||||||
*/
|
*/
|
||||||
ol.interaction.MouseWheelZoom = function() {
|
ol.interaction.MouseWheelZoom = function(opt_options) {
|
||||||
|
|
||||||
|
var options = goog.isDef(opt_options) ? opt_options : {};
|
||||||
|
|
||||||
goog.base(this);
|
goog.base(this);
|
||||||
|
|
||||||
@@ -44,6 +41,12 @@ ol.interaction.MouseWheelZoom = function() {
|
|||||||
*/
|
*/
|
||||||
this.delta_ = 0;
|
this.delta_ = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.duration_ = goog.isDef(options.duration) ? options.duration : 250;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {?ol.Coordinate}
|
* @type {?ol.Coordinate}
|
||||||
@@ -113,7 +116,7 @@ ol.interaction.MouseWheelZoom.prototype.doZoom_ = function(map) {
|
|||||||
|
|
||||||
map.requestRenderFrame();
|
map.requestRenderFrame();
|
||||||
ol.interaction.Interaction.zoomByDelta(map, view, -delta, this.lastAnchor_,
|
ol.interaction.Interaction.zoomByDelta(map, view, -delta, this.lastAnchor_,
|
||||||
ol.interaction.MOUSEWHEELZOOM_ANIMATION_DURATION);
|
this.duration_);
|
||||||
|
|
||||||
this.delta_ = 0;
|
this.delta_ = 0;
|
||||||
this.lastAnchor_ = null;
|
this.lastAnchor_ = null;
|
||||||
|
|||||||
@@ -9,20 +9,17 @@ goog.require('ol.interaction.Interaction');
|
|||||||
goog.require('ol.interaction.Touch');
|
goog.require('ol.interaction.Touch');
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @define {number} Animation duration.
|
|
||||||
*/
|
|
||||||
ol.interaction.TOUCHZOOM_ANIMATION_DURATION = 400;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows the user to zoom the map by pinching with two fingers
|
* Allows the user to zoom the map by pinching with two fingers
|
||||||
* on a touch screen.
|
* on a touch screen.
|
||||||
* @constructor
|
* @constructor
|
||||||
* @extends {ol.interaction.Touch}
|
* @extends {ol.interaction.Touch}
|
||||||
|
* @param {ol.interaction.TouchZoomOptions=} opt_options Options.
|
||||||
*/
|
*/
|
||||||
ol.interaction.TouchZoom = function() {
|
ol.interaction.TouchZoom = function(opt_options) {
|
||||||
|
|
||||||
|
var options = goog.isDef(opt_options) ? opt_options : {};
|
||||||
|
|
||||||
goog.base(this);
|
goog.base(this);
|
||||||
|
|
||||||
@@ -32,6 +29,12 @@ ol.interaction.TouchZoom = function() {
|
|||||||
*/
|
*/
|
||||||
this.anchor_ = null;
|
this.anchor_ = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.duration_ = goog.isDef(options.duration) ? options.duration : 400;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {number|undefined}
|
* @type {number|undefined}
|
||||||
@@ -107,7 +110,7 @@ ol.interaction.TouchZoom.prototype.handleTouchEnd =
|
|||||||
// Direction is > 0 if pinching out, and < 0 if pinching in.
|
// Direction is > 0 if pinching out, and < 0 if pinching in.
|
||||||
var direction = this.lastScaleDelta_ - 1;
|
var direction = this.lastScaleDelta_ - 1;
|
||||||
ol.interaction.Interaction.zoom(map, view, view2DState.resolution,
|
ol.interaction.Interaction.zoom(map, view, view2DState.resolution,
|
||||||
this.anchor_, ol.interaction.TOUCHZOOM_ANIMATION_DURATION, direction);
|
this.anchor_, this.duration_, direction);
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Reference in New Issue
Block a user