blob: 7a324611b9d71d3fabb0c520876fbbc642fa5379 [file] [log] [blame]
<!DOCTYPE html>
<style type="text/css">
.target {
position: relative;
height: 100px;
width: 100px;
background-color: red;
margin-bottom: 10px;
}
.animated {
animation: test 10ms linear forwards;
animation-play-state: paused;
}
.running {
animation-play-state: running;
}
#animation1 {
animation-delay: -10ms;
}
#animation2 {
animation-delay: 0ms;
}
#animation3 {
animation-delay: 10ms;
}
@keyframes test {
from { left: 100px; }
to { left: 300px; }
}
</style>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script type="text/javascript">
async_test(t => {
function startNextAnimation(currentId) {
// Running animations serially avoids flakiness due to overlap.
if (currentId === 'animation1') {
start(document.getElementById('animation2'), true);
} else if (currentId === 'animation2') {
start(document.getElementById('animation3'), false);
} else if (currentId === 'animation3') {
t.done();
}
}
var isRunning;
function run(element) {
element.classList.add('running');
isRunning = true;
}
function start(target, expectImmediateStartEvent) {
isRunning = false;
target.addEventListener('animationstart', t.step_func((e) => {
var id = e.target.id;
if (expectImmediateStartEvent) {
assert_false(isRunning, 'Start event should be fired without setting play state to running');
} else {
assert_true(isRunning, 'Start event should be fired after play state was set to running');
}
startNextAnimation(id);
}));
target.classList.add('animated');
if (!expectImmediateStartEvent) {
t.step_timeout(run.bind(null, target), 100);
}
}
window.addEventListener("load", t.step_func(() => {
start(document.getElementById('animation1'), true);
}));
}, "Tests that an animation which is initially paused fires its start event as soon as its delay expires, not when it transitions to the running state");
</script>
<div class="target" id="animation1"></div>
<div class="target" id="animation2"></div>
<div class="target" id="animation3"></div>