| <!DOCTYPE html> |
| <style type="text/css"> |
| .box { |
| position: relative; |
| height: 25px; |
| width: 25px; |
| background-color: blue; |
| margin: 10px; |
| } |
| .animation { |
| animation-duration: 0.1s; |
| animation-name: animation; |
| } |
| #animation1 { |
| animation-delay: 0.05s; |
| } |
| #animation2 { |
| animation-delay: -0.05s; |
| } |
| #animation3 { |
| animation-delay: -0.15s; |
| } |
| @keyframes animation { |
| from { left: 0; } |
| to { left: 500px; } |
| } |
| </style> |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <script type="text/javascript"> |
| async_test(t => { |
| var count = 0; |
| document.addEventListener('animationstart', t.step_func((event) => { |
| // Elapsed time caps at the animation duration. |
| var pass = event.elapsedTime === [0, 0.05, 0.1][count++]; |
| assert_true(pass, event.target.id + ': Start event: elapsedTime=' + event.elapsedTime); |
| })); |
| |
| document.addEventListener('animationend', t.step_func((event) => { |
| var pass = event.elapsedTime === 0.1; |
| assert_true(pass, event.target.id + ': End event: elapsedTime=' + event.elapsedTime); |
| switch (count) { |
| case 1: |
| document.getElementById('animation2').classList.add('animation'); |
| break; |
| case 2: |
| document.getElementById('animation3').classList.add('animation'); |
| break; |
| case 3: |
| t.done(); |
| } |
| })); |
| }, "Tests animation events with a negative delay"); |
| </script> |
| <div id="animation1" class="box animation"></div> |
| <div id="animation2" class="box"></div> |
| <div id="animation3" class="box"></div> |