blob: 12710ded5c57d54278f758b3dc3dfc3f11620ff2 [file] [log] [blame]
<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<style>
div {
position: relative;
height: 50px;
width: 50px;
background-color: blue;
}
.animated {
animation: 20s linear -10s anim;
}
@keyframes anim {
from { left: -9500px; }
to { left: 10500px; }
}
</style>
<div id="target"></div>
<div id="clock" class="animated"></div>
<script>
'use strict';
var asyncHandle = async_test('Resetting display from "none" causes animation to restart');
window.onload = function() {
target.addEventListener('animationstart', onStart);
target.classList.add('animated');
};
function onStart() {
target.removeEventListener('animationstart', onStart);
setTimeout(setDisplayNone, 300);
}
function setDisplayNone() {
target.style.display = 'none';
requestAnimationFrame(function() {
requestAnimationFrame(asyncHandle.step_func(setDisplayBlock));
});
}
var initialClock;
function setDisplayBlock() {
assert_equals(target.getAnimations().length, 0);
target.addEventListener('animationstart', onRestart);
target.style.display = 'block';
initialClock = parseFloat(getComputedStyle(clock).left);
assert_equals(getComputedStyle(target).left, '500px');
}
function onRestart(e) {
setTimeout(asyncHandle.step_func_done(measureProgress), 100);
}
function measureProgress() {
assert_equals(target.getAnimations().length, 1);
// The animation's progress is based on the time since display: block,
// not the time since the 'animated' class was first added to target.
var elapsedTime = parseFloat(getComputedStyle(clock).left) - initialClock;
assert_approx_equals(parseFloat(getComputedStyle(target).left), 500 + elapsedTime, 1);
}
</script>