Use option object rather than positional arguments for ol.animation.create* functions

This commit is contained in:
Frederic Junod
2013-01-23 14:35:14 +01:00
parent 6d3e0778e1
commit 7568688301
4 changed files with 113 additions and 65 deletions
+24
View File
@@ -26,6 +26,30 @@
@exportObjectLiteralProperty ol.View2DOptions.zoom number|undefined
@exportObjectLiteralProperty ol.View2DOptions.zoomFactor number|undefined
@exportObjectLiteral ol.animation.BounceOptions
@exportObjectLiteralProperty ol.animation.BounceOptions.resolution number
@exportObjectLiteralProperty ol.animation.BounceOptions.start number|undefined
@exportObjectLiteralProperty ol.animation.BounceOptions.duration number|undefined
@exportObjectLiteralProperty ol.animation.BounceOptions.easing function(number):number|undefined
@exportObjectLiteral ol.animation.PanFromOptions
@exportObjectLiteralProperty ol.animation.PanFromOptions.source ol.Coordinate
@exportObjectLiteralProperty ol.animation.PanFromOptions.start number|undefined
@exportObjectLiteralProperty ol.animation.PanFromOptions.duration number|undefined
@exportObjectLiteralProperty ol.animation.PanFromOptions.easing function(number):number|undefined
@exportObjectLiteral ol.animation.SpinOptions
@exportObjectLiteralProperty ol.animation.SpinOptions.turns number
@exportObjectLiteralProperty ol.animation.SpinOptions.start number|undefined
@exportObjectLiteralProperty ol.animation.SpinOptions.duration number|undefined
@exportObjectLiteralProperty ol.animation.SpinOptions.easing function(number):number|undefined
@exportObjectLiteral ol.animation.ZoomFromOptions
@exportObjectLiteralProperty ol.animation.ZoomFromOptions.resolution number
@exportObjectLiteralProperty ol.animation.ZoomFromOptions.start number|undefined
@exportObjectLiteralProperty ol.animation.ZoomFromOptions.duration number|undefined
@exportObjectLiteralProperty ol.animation.ZoomFromOptions.easing function(number):number|undefined
@exportObjectLiteral ol.control.AttributionOptions
@exportObjectLiteralProperty ol.control.AttributionOptions.map ol.Map|undefined
@exportObjectLiteralProperty ol.control.AttributionOptions.target Element|undefined
+33 -46
View File
@@ -9,25 +9,22 @@ goog.require('ol.easing');
/**
* @param {number} resolution Resolution.
* @param {number=} opt_duration Duration.
* @param {number=} opt_start Start.
* @param {function(number): number=} opt_easingFunction Easing function.
* @param {ol.animation.BounceOptions} options Options.
* @return {ol.PreRenderFunction} Pre-render function.
*/
ol.animation.createBounce =
function(resolution, opt_duration, opt_start, opt_easingFunction) {
var start = goog.isDef(opt_start) ? opt_start : goog.now();
var duration = goog.isDef(opt_duration) ? opt_duration : 1000;
var easingFunction = goog.isDef(opt_easingFunction) ?
opt_easingFunction : ol.easing.upAndDown;
ol.animation.createBounce = function(options) {
var resolution = options.resolution;
var start = goog.isDef(options.start) ? options.start : goog.now();
var duration = goog.isDef(options.duration) ? options.duration : 1000;
var easing = goog.isDef(options.easing) ?
options.easing : ol.easing.upAndDown;
return function(map, frameState) {
if (frameState.time < start) {
frameState.animate = true;
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
return true;
} else if (frameState.time < start + duration) {
var delta = easingFunction((frameState.time - start) / duration);
var delta = easing((frameState.time - start) / duration);
var deltaResolution = resolution - frameState.view2DState.resolution;
frameState.animate = true;
frameState.view2DState.resolution += delta * deltaResolution;
@@ -41,27 +38,24 @@ ol.animation.createBounce =
/**
* @param {ol.Coordinate} source Source.
* @param {number=} opt_duration Duration.
* @param {number=} opt_start Start.
* @param {function(number): number=} opt_easingFunction Easing function.
* @param {ol.animation.PanFromOptions} options Options.
* @return {ol.PreRenderFunction} Pre-render function.
*/
ol.animation.createPanFrom =
function(source, opt_duration, opt_start, opt_easingFunction) {
var start = goog.isDef(opt_start) ? opt_start : goog.now();
ol.animation.createPanFrom = function(options) {
var source = options.source;
var start = goog.isDef(options.start) ? options.start : goog.now();
var sourceX = source.x;
var sourceY = source.y;
var duration = goog.isDef(opt_duration) ? opt_duration : 1000;
var easingFunction = goog.isDef(opt_easingFunction) ?
opt_easingFunction : goog.fx.easing.inAndOut;
var duration = goog.isDef(options.duration) ? options.duration : 1000;
var easing = goog.isDef(options.easing) ?
options.easing : goog.fx.easing.inAndOut;
return function(map, frameState) {
if (frameState.time < start) {
frameState.animate = true;
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
return true;
} else if (frameState.time < start + duration) {
var delta = 1 - easingFunction((frameState.time - start) / duration);
var delta = 1 - easing((frameState.time - start) / duration);
var deltaX = sourceX - frameState.view2DState.center.x;
var deltaY = sourceY - frameState.view2DState.center.y;
frameState.animate = true;
@@ -77,27 +71,23 @@ ol.animation.createPanFrom =
/**
* @param {number=} opt_duration Duration.
* @param {number=} opt_turns Turns.
* @param {number=} opt_start Start.
* @param {function(number): number=} opt_easingFunction Easing function.
* @param {ol.animation.SpinOptions} options Options.
* @return {ol.PreRenderFunction} Pre-render function.
*/
ol.animation.createSpin =
function(opt_duration, opt_turns, opt_start, opt_easingFunction) {
var start = goog.isDef(opt_start) ? opt_start : goog.now();
var duration = goog.isDef(opt_duration) ? opt_duration : 1000;
var turns = goog.isDef(opt_turns) ? opt_turns : 1;
var deltaTheta = 2 * turns * Math.PI;
var easingFunction = goog.isDef(opt_easingFunction) ?
opt_easingFunction : goog.fx.easing.inAndOut;
ol.animation.createSpin = function(options) {
var start = goog.isDef(options.start) ? options.start : goog.now();
var duration = goog.isDef(options.duration) ? options.duration : 1000;
var easing = goog.isDef(options.easing) ?
options.easing : goog.fx.easing.inAndOut;
var deltaTheta = 2 * options.turns * Math.PI;
return function(map, frameState) {
if (frameState.time < start) {
frameState.animate = true;
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
return true;
} else if (frameState.time < start + duration) {
var delta = easingFunction((frameState.time - start) / duration);
var delta = easing((frameState.time - start) / duration);
frameState.animate = true;
frameState.view2DState.rotation += delta * deltaTheta;
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
@@ -110,25 +100,22 @@ ol.animation.createSpin =
/**
* @param {number} sourceResolution Source resolution.
* @param {number=} opt_duration Duration.
* @param {number=} opt_start Start.
* @param {function(number): number=} opt_easingFunction Easing function.
* @param {ol.animation.ZoomFromOptions} options Options.
* @return {ol.PreRenderFunction} Pre-render function.
*/
ol.animation.createZoomFrom =
function(sourceResolution, opt_duration, opt_start, opt_easingFunction) {
var start = goog.isDef(opt_start) ? opt_start : goog.now();
var duration = goog.isDef(opt_duration) ? opt_duration : 1000;
var easingFunction = goog.isDef(opt_easingFunction) ?
opt_easingFunction : ol.easing.linear;
ol.animation.createZoomFrom = function(options) {
var sourceResolution = options.resolution;
var start = goog.isDef(options.start) ? options.start : goog.now();
var duration = goog.isDef(options.duration) ? options.duration : 1000;
var easing = goog.isDef(options.easing) ?
options.easing : ol.easing.linear;
return function(map, frameState) {
if (frameState.time < start) {
frameState.animate = true;
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
return true;
} else if (frameState.time < start + duration) {
var delta = 1 - easingFunction((frameState.time - start) / duration);
var delta = 1 - easing((frameState.time - start) / duration);
var deltaResolution =
sourceResolution - frameState.view2DState.resolution;
frameState.animate = true;
+4 -2
View File
@@ -296,8 +296,10 @@ ol.View2D.prototype.zoom = function(map, delta, opt_anchor, opt_duration) {
var currentResolution = this.getResolution();
if (goog.isDef(currentResolution) && goog.isDef(opt_duration)) {
map.requestRenderFrame();
map.addPreRenderFunction(ol.animation.createZoomFrom(
currentResolution, opt_duration));
map.addPreRenderFunction(ol.animation.createZoomFrom({
resolution: currentResolution,
duration: opt_duration
}));
}
var resolution = this.constraints_.resolution(currentResolution, delta);
this.zoom_(map, resolution, opt_anchor);