Files
openlayers/tests/Tween.html
ahocevar f0f1ea0867 Skip frames when minimum frame rate is not reached
The new minFrameRate option is used to make sure that an animation does not
run longer than the time calculated from that frame rate. Time is made up
by skipping frames, i.e. skipping execution of the eachStep callback.
2012-12-17 14:54:08 +01:00

114 lines
3.6 KiB
HTML

<html>
<head>
<script>
/**
* Because browsers that implement requestAnimationFrame may not execute
* animation functions while a window is not displayed (e.g. in a hidden
* iframe as in these tests), we mask the native implementations here. The
* native requestAnimationFrame functionality is tested in Util.html and
* in PanZoom.html (where a popup is opened before panning). The panTo tests
* here will test the fallback setTimeout implementation for animation.
*/
window.requestAnimationFrame =
window.webkitRequestAnimationFrame =
window.mozRequestAnimationFrame =
window.oRequestAnimationFrame =
window.msRequestAnimationFrame = null;
</script>
<script src="OLLoader.js"></script>
<script type="text/javascript">
function test_Tween_constructor(t) {
t.plan(3);
var tween = new OpenLayers.Tween();
t.ok(tween instanceof OpenLayers.Tween,
"new OpenLayers.Tween returns object" );
t.eq(typeof tween.easing, "function",
"constructor sets easing correctly");
t.eq(typeof tween.start, "function", "tween has a start function");
}
function test_Tween_start(t) {
t.plan(5);
var tween = new OpenLayers.Tween();
var start = {foo: 0, bar: 10};
var finish = {foo: 10, bar: 0};
var _start = false;
var _done = false;
var _eachStep = false;
var callbacks = {
start: function() {
_start = true;
},
done: function() {
_done = true;
},
eachStep: function() {
_eachStep = true;
}
}
tween.start(start, finish, 10, {callbacks: callbacks});
t.ok(tween.animationId != null, "animationId correctly set");
t.delay_call(0.8, function() {
t.eq(_start, true, "start callback called");
t.eq(_done, true, "finish callback called");
t.eq(_eachStep, true, "eachStep callback called");
t.eq(tween.time, 11, "Number of steps reached is correct");
});
}
function test_Tween_stop(t) {
t.plan(2);
var tween = new OpenLayers.Tween();
tween.animationId = OpenLayers.Animation.start(function() {});
tween.playing = true;
tween.stop();
t.eq(tween.animationId, null, "tween correctly stopped");
tween.animationId = OpenLayers.Animation.start(function() {});
tween.playing = false;
tween.stop();
t.ok(tween.animationId != null, "stop method doesn't do anything if tween isn't running");
}
function test_Tween_skip(t) {
t.plan(2);
var tween = new OpenLayers.Tween();
var log1 = 0;
tween.start({count: 0}, {count: 10}, 10, {
callbacks: {
eachStep: function() {
log1++;
}
},
minFrameRate: 10000
});
var log2 = 0;
tween.start({count: 0}, {count: 10}, 10, {
callbacks: {
eachStep: function() {
log2++;
}
},
minFrameRate: 1
});
t.delay_call(0.8, function() {
t.eq(log1, 0, 'all frames skipped at a frame rate of 10000');
t.eq(log2, 11, 'no frames skipped at a frame rate of 1');
});
}
</script>
</head>
<body>
<div id="map" style="width:500px;height:500px"></div>
</body>
</html>