| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../resources/js-test.js"></script> |
| <script src="../resources/ui-helper.js"></script> |
| <style> |
| #target { |
| position: absolute; |
| top: 100px; |
| left: 100px; |
| height: 100px; |
| width: 100px; |
| background: green; |
| animation: fadeIn 30ms; |
| } |
| |
| @keyframes fadeIn { |
| 0% { opacity: 0; } |
| 100% { opacity: 1; } |
| } |
| |
| .transition { |
| transition: transform 60ms; |
| transform: translateX(200%); |
| } |
| |
| .no-transition { |
| transition: none; |
| transform: translateX(0); |
| } |
| </style> |
| </head> |
| <body> |
| <div id="target"></div> |
| <script> |
| jsTestIsAsync = true; |
| target = document.getElementById("target"); |
| |
| description("The test passes if the animationend event is followed by two transitionend events."); |
| |
| target.addEventListener("transitionend", async () => { |
| testPassed("Observed first 'transitionend' event. Starting second transition..."); |
| target.classList.replace("transition", "no-transition"); |
| |
| await UIHelper.renderingUpdate(); |
| await UIHelper.renderingUpdate(); |
| |
| target.classList.replace("no-transition", "transition"); |
| target.addEventListener("transitionend", () => { |
| testPassed("Observed second 'transitionend' event."); |
| finishJSTest(); |
| }); |
| }, { once: true }); |
| |
| target.addEventListener("animationend", () => { |
| testPassed("Observed 'animationend' event. Starting first transition..."); |
| target.classList.add("transition"); |
| }); |
| </script> |
| </body> |
| </html> |