blob: 4718ebb0eba70f6c89277e1db58948901873aaeb [file] [log] [blame]
<!DOCTYPE html>
<!--
| Test case which ensures that animationend events are not fired on animations
| that are canceled by being removed before they are finished.
| https://drafts.csswg.org/date/2015-03-02/web-animations-css-integration/#css-animations-events
-->
<html>
<head>
<style>
@keyframes testAnimation{
0% { transform: translate(100px,0); }
100% { transform: translate(0, 0); }
}
.block {
width: 200px;
padding: 5px 5px 5px 5px;
margin: 2px 2px 2px 2px;
height: 50px;
background-color: rgb(150, 50, 255);
font-size: 30px;
animation: testAnimation 0.1s forwards;
background-color: red;
}
</style>
</head>
<body>
<div id="block" class="block"></div>
<script>
var animationsEnded = 0;
if (window.testRunner) {
window.testRunner.waitUntilDone();
}
var blockDiv = document.getElementById('block');
blockDiv.addEventListener('animationend', function (e) {
e.target.innerHTML = ++animationsEnded + ' ' + e.target.id;
// Change the div to red when the handler is called.
e.target.style.backgroundColor = 'rgb(250, 0, 0)'
// Take a snapshot after all the divs have finished transitioning.
if (window.testRunner) {
// Do another layout to update the text.
window.testRunner.DoNonMeasuredLayout();
}
});
window.addEventListener('load', function() {
setTimeout( () => {
// Cancel the animation by setting it to none.
blockDiv.style.animation = 'none';
s = window.getComputedStyle(blockDiv);
blockDiv.innerHTML = "canceled"
// Change the div to green when the animation is canceled.
blockDiv.style.backgroundColor = 'rgb(0, 250, 0)'
if (window.testRunner) {
// Do another layout to update the text.
window.testRunner.DoNonMeasuredLayout();
}
}, 50);
setTimeout( () => {
// Take a snapshot after the animationend would have fired.
if (window.testRunner) {
window.testRunner.notifyDone();
}
}, 200);
if (window.testRunner) {
// Do another layout to start the animation.
window.testRunner.DoNonMeasuredLayout();
}
});
</script>
</body>
</html>