Add new ol.easing.elastic and ol.easing.bounce easing functions.

This commit is contained in:
Frederic Junod
2013-01-17 17:03:53 +01:00
parent 202df34e71
commit 8825251c42
2 changed files with 41 additions and 2 deletions

View File

@@ -113,7 +113,8 @@ keyboardInteraction.addCallback('j', function() {
canvasMap.addPreRenderFunction(bounce); canvasMap.addPreRenderFunction(bounce);
}); });
keyboardInteraction.addCallback('l', function() { keyboardInteraction.addCallback('l', function() {
var panFrom = ol.animation.createPanFrom(view.getCenter()); var panFrom = ol.animation.createPanFrom(
view.getCenter(), undefined, undefined, ol.easing.elastic);
domMap.addPreRenderFunction(panFrom); domMap.addPreRenderFunction(panFrom);
webglMap.addPreRenderFunction(panFrom); webglMap.addPreRenderFunction(panFrom);
canvasMap.addPreRenderFunction(panFrom); canvasMap.addPreRenderFunction(panFrom);
@@ -133,7 +134,8 @@ keyboardInteraction.addCallback('L', function() {
view.setCenter(LONDON); view.setCenter(LONDON);
}); });
keyboardInteraction.addCallback('m', function() { keyboardInteraction.addCallback('m', function() {
var panFrom = ol.animation.createPanFrom(view.getCenter(), 1000); var panFrom = ol.animation.createPanFrom(
view.getCenter(), 1000, undefined, ol.easing.bounce);
domMap.addPreRenderFunction(panFrom); domMap.addPreRenderFunction(panFrom);
webglMap.addPreRenderFunction(panFrom); webglMap.addPreRenderFunction(panFrom);
canvasMap.addPreRenderFunction(panFrom); canvasMap.addPreRenderFunction(panFrom);

View File

@@ -21,3 +21,40 @@ ol.easing.upAndDown = function(t) {
return 1 - goog.fx.easing.inAndOut(2 * (t - 0.5)); return 1 - goog.fx.easing.inAndOut(2 * (t - 0.5));
} }
}; };
/**
* from https://raw.github.com/DmitryBaranovskiy/raphael/master/raphael.js
* @param {number} t Input between 0 and 1.
* @return {number} Output between 0 and 1.
*/
ol.easing.elastic = function(t) {
return Math.pow(2, -10 * t) * Math.sin((t - 0.075) * (2 * Math.PI) / 0.3) + 1;
};
/**
* from https://raw.github.com/DmitryBaranovskiy/raphael/master/raphael.js
* @param {number} t Input between 0 and 1.
* @return {number} Output between 0 and 1.
*/
ol.easing.bounce = function(t) {
var s = 7.5625, p = 2.75, l;
if (t < (1 / p)) {
l = s * t * t;
} else {
if (t < (2 / p)) {
t -= (1.5 / p);
l = s * t * t + 0.75;
} else {
if (t < (2.5 / p)) {
t -= (2.25 / p);
l = s * t * t + 0.9375;
} else {
t -= (2.625 / p);
l = s * t * t + 0.984375;
}
}
}
return l;
};