blob: 96af85a96f0b0e990c86dd2038d3ef2758d9edf5 [file] [log] [blame]
<!DOCTYPE html>
<head>
<title>Test of animation-play-state</title>
<style>
.target {
height: 100px;
width: 100px;
animation-duration: 1000ms;
animation-timing-function: linear;
}
#translate {
background-color: blue;
}
#translate.started {
animation-name: move1;
}
@keyframes move1 {
from { transform: translateX(100px); }
to { transform: translateX(200px); }
}
#left {
position: relative;
background-color: red;
}
#left.started {
animation-name: move2;
}
@keyframes move2 {
from { left: 100px; }
to { left: 200px; }
}
.paused {
animation-play-state: paused;
}
.quick {
animation-duration: 100ms;
}
</style>
<script src="resources/animation-test-helpers.js" type="text/javascript"></script>
<script type="text/javascript">
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
function log(message) {
var div = document.createElement('div');
div.textContent = message;
document.body.appendChild(div);
}
function logPassFail(expected, actual, id, description) {
var didPass = expected === actual;
log((didPass ? 'PASS' : 'FAIL') + ': Element \'' + id + '\' had ' + (didPass ? 'correct' : 'incorrect') + ' style ' + description);
}
function toggleClass(className) {
var targets = document.getElementsByClassName('target');
for (var i = 0; i < targets.length; ++i) {
targets[i].classList.toggle(className);
}
}
function start() {
document.removeEventListener('animationstart', start, false);
requestAnimationFrame(pause);
}
var transform;
var left;
var paused = false;
function pause() {
paused = true;
toggleClass('paused');
// Transitioning the play state from running to paused is asynchronous.
// The animation is paused once the user agent signals that the animation
// is ready.
requestAnimationFrame(() => {
transform = getComputedStyle(document.getElementById('translate')).transform;
left = getComputedStyle(document.getElementById('left')).left;
requestAnimationFrame(resume);
});
}
function resume() {
logPassFail(transform, getComputedStyle(document.getElementById('translate')).transform, 'translate', 'when paused');
logPassFail(left, getComputedStyle(document.getElementById('left')).left, 'left', 'when paused');
toggleClass('paused');
toggleClass('quick');
}
function end() {
document.removeEventListener('animationend', end, false);
if (!paused)
log('Missed frame in which to pause animation');
logPassFail('none', getComputedStyle(document.getElementById('translate')).transform, 'translate', 'at end');
logPassFail('0px', getComputedStyle(document.getElementById('left')).left, 'left', 'at end');
if (window.testRunner) {
testRunner.notifyDone();
}
}
// Wait until the page has loaded and painted to start the animations to
// ensure we will have enough main frames to pause the animation.
requestAnimationFrame(function() {
requestAnimationFrame(function() {
document.addEventListener('animationstart', start, false);
document.addEventListener('animationend', end, false);
toggleClass('started');
});
});
</script>
</head>
<body>
<p>
This tests the operation of animation-play-state. We test style
while the animations are paused and once unpaused.
</p>
<div class="target" id="translate">transform</div>
<div class="target" id="left">left</div>
</body>
</html>