This follows the convention in the Closure Library of providing either namespace objects (where the property starts with a lowercase letter), constructors (where the property starts with an uppercase letter), or enums (all uppercase properties, only one instance of this in the closure library).
151 lines
5.1 KiB
JavaScript
151 lines
5.1 KiB
JavaScript
// FIXME works for View2D only
|
|
|
|
goog.provide('ol.animation');
|
|
|
|
goog.require('ol.PreRenderFunction');
|
|
goog.require('ol.ViewHint');
|
|
goog.require('ol.easing');
|
|
|
|
|
|
/**
|
|
* @param {ol.animation.BounceOptions} options Bounce options.
|
|
* @return {ol.PreRenderFunction} Pre-render function.
|
|
*/
|
|
ol.animation.bounce = 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 (
|
|
/**
|
|
* @param {ol.Map} map Map.
|
|
* @param {?ol.FrameState} frameState Frame state.
|
|
*/
|
|
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 = easing((frameState.time - start) / duration);
|
|
var deltaResolution = resolution - frameState.view2DState.resolution;
|
|
frameState.animate = true;
|
|
frameState.view2DState.resolution += delta * deltaResolution;
|
|
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
});
|
|
};
|
|
|
|
|
|
/**
|
|
* @param {ol.animation.PanOptions} options Pan options.
|
|
* @return {ol.PreRenderFunction} Pre-render function.
|
|
*/
|
|
ol.animation.pan = function(options) {
|
|
var source = options.source;
|
|
var start = goog.isDef(options.start) ? options.start : goog.now();
|
|
var sourceX = source[0];
|
|
var sourceY = source[1];
|
|
var duration = goog.isDef(options.duration) ? options.duration : 1000;
|
|
var easing = goog.isDef(options.easing) ?
|
|
options.easing : ol.easing.inAndOut;
|
|
return (
|
|
/**
|
|
* @param {ol.Map} map Map.
|
|
* @param {?ol.FrameState} frameState Frame state.
|
|
*/
|
|
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 - easing((frameState.time - start) / duration);
|
|
var deltaX = sourceX - frameState.view2DState.center[0];
|
|
var deltaY = sourceY - frameState.view2DState.center[1];
|
|
frameState.animate = true;
|
|
frameState.view2DState.center[0] += delta * deltaX;
|
|
frameState.view2DState.center[1] += delta * deltaY;
|
|
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
});
|
|
};
|
|
|
|
|
|
/**
|
|
* @param {ol.animation.RotateOptions} options Rotate options.
|
|
* @return {ol.PreRenderFunction} Pre-render function.
|
|
*/
|
|
ol.animation.rotate = 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 : ol.easing.inAndOut;
|
|
|
|
return (
|
|
/**
|
|
* @param {ol.Map} map Map.
|
|
* @param {?ol.FrameState} frameState Frame state.
|
|
*/
|
|
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 - easing((frameState.time - start) / duration);
|
|
var deltaRotation =
|
|
sourceRotation - frameState.view2DState.rotation;
|
|
frameState.animate = true;
|
|
frameState.view2DState.rotation += delta * deltaRotation;
|
|
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
});
|
|
};
|
|
|
|
|
|
/**
|
|
* @param {ol.animation.ZoomOptions} options Zoom options.
|
|
* @return {ol.PreRenderFunction} Pre-render function.
|
|
*/
|
|
ol.animation.zoom = 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.inAndOut;
|
|
return (
|
|
/**
|
|
* @param {ol.Map} map Map.
|
|
* @param {?ol.FrameState} frameState Frame state.
|
|
*/
|
|
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 - easing((frameState.time - start) / duration);
|
|
var deltaResolution =
|
|
sourceResolution - frameState.view2DState.resolution;
|
|
frameState.animate = true;
|
|
frameState.view2DState.resolution += delta * deltaResolution;
|
|
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
});
|
|
};
|