diff --git a/examples/side-by-side.js b/examples/side-by-side.js index 4c5bb354b7..b2bd32b0e8 100644 --- a/examples/side-by-side.js +++ b/examples/side-by-side.js @@ -140,12 +140,12 @@ keyboardInteraction.addCallback('L', function() { start: start, duration: duration }); - var spin = ol.animation.createSpin({ - turns: 2, + var rotateFrom = ol.animation.createRotateFrom({ + rotation: 4 * Math.PI, start: start, duration: duration }); - var preRenderFunctions = [bounce, panFrom, spin]; + var preRenderFunctions = [bounce, panFrom, rotateFrom]; domMap.addPreRenderFunctions(preRenderFunctions); webglMap.addPreRenderFunctions(preRenderFunctions); canvasMap.addPreRenderFunctions(preRenderFunctions); @@ -175,12 +175,12 @@ keyboardInteraction.addCallback('M', function() { start: start, duration: duration }); - var spin = ol.animation.createSpin({ - turns: -2, + var rotateFrom = ol.animation.createRotateFrom({ + rotation: -4 * Math.PI, start: start, duration: duration }); - var preRenderFunctions = [bounce, panFrom, spin]; + var preRenderFunctions = [bounce, panFrom, rotateFrom]; domMap.addPreRenderFunctions(preRenderFunctions); webglMap.addPreRenderFunctions(preRenderFunctions); canvasMap.addPreRenderFunctions(preRenderFunctions); @@ -206,21 +206,21 @@ keyboardInteraction.addCallback('vV', function() { layer.setVisible(!layer.getVisible()); }); keyboardInteraction.addCallback('x', function() { - var spin = ol.animation.createSpin({ - turns: 2, + var rotateFrom = ol.animation.createRotateFrom({ + rotation: 4 * Math.PI, duration: 2000 }); - domMap.addPreRenderFunction(spin); - webglMap.addPreRenderFunction(spin); - canvasMap.addPreRenderFunction(spin); + domMap.addPreRenderFunction(rotateFrom); + webglMap.addPreRenderFunction(rotateFrom); + canvasMap.addPreRenderFunction(rotateFrom); }); keyboardInteraction.addCallback('X', function() { - var spin = ol.animation.createSpin({ - turns: -2, + var rotateFrom = ol.animation.createRotateFrom({ + rotation: -4 * Math.PI, duration: 2000 }); - domMap.addPreRenderFunction(spin); - webglMap.addPreRenderFunction(spin); - canvasMap.addPreRenderFunction(spin); + domMap.addPreRenderFunction(rotateFrom); + webglMap.addPreRenderFunction(rotateFrom); + canvasMap.addPreRenderFunction(rotateFrom); }); domMap.getInteractions().push(keyboardInteraction); diff --git a/src/objectliterals.exports b/src/objectliterals.exports index bbd66ec223..5e91af98ff 100644 --- a/src/objectliterals.exports +++ b/src/objectliterals.exports @@ -38,11 +38,11 @@ @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.RotateFromOptions +@exportObjectLiteralProperty ol.animation.RotateFromOptions.rotation number +@exportObjectLiteralProperty ol.animation.RotateFromOptions.start number|undefined +@exportObjectLiteralProperty ol.animation.RotateFromOptions.duration number|undefined +@exportObjectLiteralProperty ol.animation.RotateFromOptions.easing function(number):number|undefined @exportObjectLiteral ol.animation.ZoomFromOptions @exportObjectLiteralProperty ol.animation.ZoomFromOptions.resolution number diff --git a/src/ol/animation.exports b/src/ol/animation.exports index 7286bf8cc3..e1798d8654 100644 --- a/src/ol/animation.exports +++ b/src/ol/animation.exports @@ -1,4 +1,4 @@ @exportSymbol ol.animation @exportProperty ol.animation.createBounce @exportProperty ol.animation.createPanFrom -@exportProperty ol.animation.createSpin +@exportProperty ol.animation.createRotateFrom diff --git a/src/ol/animation.js b/src/ol/animation.js index feccd87f06..0313069047 100644 --- a/src/ol/animation.js +++ b/src/ol/animation.js @@ -71,15 +71,15 @@ ol.animation.createPanFrom = function(options) { /** - * @param {ol.animation.SpinOptions} options Options. + * @param {ol.animation.RotateFromOptions} options Options. * @return {ol.PreRenderFunction} Pre-render function. */ -ol.animation.createSpin = function(options) { +ol.animation.createRotateFrom = function(options) { + var sourceRotation = options.rotation; 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) { @@ -87,9 +87,11 @@ ol.animation.createSpin = function(options) { frameState.viewHints[ol.ViewHint.ANIMATING] += 1; return true; } else if (frameState.time < start + duration) { - var delta = easing((frameState.time - start) / duration); + var delta = 1 - easing((frameState.time - start) / duration); + var deltaRotation = + sourceRotation - frameState.view2DState.rotation; frameState.animate = true; - frameState.view2DState.rotation += delta * deltaTheta; + frameState.view2DState.rotation += delta * deltaRotation; frameState.viewHints[ol.ViewHint.ANIMATING] += 1; return true; } else {