| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> | |
| <html lang="en"> | |
| <head> | |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> | |
| <title>Dynamic Keyframes test</title> | |
| <style type="text/css" media="screen"> | |
| .box { | |
| position: absolute; | |
| left: 0; | |
| top: 100px; | |
| height: 100px; | |
| width: 100px; | |
| background-color: blue; | |
| -webkit-animation-duration: 1s; | |
| -webkit-animation-timing-function: linear; | |
| } | |
| #box2 { top: 210px; } | |
| #box3 { top: 320px; } | |
| </style> | |
| <script src="resources/animation-test-helpers.js" type="text/javascript" charset="utf-8"></script> | |
| <script type="text/javascript" charset="utf-8"> | |
| const expectedValues = [ | |
| // [animation-name, time, element-id, property, expected-value, tolerance] | |
| ["anim1", 0.3, "box1", "left", 100, 1], | |
| ["anim1", 0.7, "box1", "left", 200, 1], | |
| ["anim2", 0.3, "box2", "left", 100, 1], | |
| ["anim2", 0.7, "box2", "left", 200, 1], | |
| ]; | |
| function addKeyframes() { | |
| var style = document.createElement('style'); | |
| document.head.appendChild(style); | |
| var keyframes = | |
| "{\n" + | |
| " from { left: 50px; }\n" + | |
| " 20% { left: 100px; }\n" + | |
| " 40% { left: 100px; }\n" + | |
| " 60% { left: 200px; }\n" + | |
| " 80% { left: 200px; }\n" + | |
| " to { left: 300px; }\n" + | |
| "}"; | |
| var box1Keyframes = "@-webkit-keyframes anim1 " + keyframes; | |
| var box2Keyframes = "@-webkit-keyframes anim2 " + keyframes; | |
| var box3Keyframes = "@-webkit-keyframes anim3 " + keyframes; | |
| style.sheet.insertRule(box1Keyframes, 0); | |
| var box2Index = style.sheet.insertRule(box2Keyframes, 0); | |
| var box3Index = style.sheet.insertRule(box3Keyframes, 0); | |
| var box1 = document.getElementById("box1"); | |
| var box2 = document.getElementById("box2"); | |
| var box3 = document.getElementById("box3"); | |
| box1.style.webkitAnimationName = 'anim1'; | |
| box2.style.webkitAnimationName = 'anim2'; | |
| box3.style.webkitAnimationName = 'anim3'; | |
| box2.addEventListener('webkitAnimationStart', | |
| function() { style.sheet.removeRule(box2Index); }, true); | |
| style.sheet.removeRule(box3Index); | |
| runAnimationTest(expectedValues, () => { | |
| setTimeout(() => { | |
| document.getElementById("result").appendChild(document.createTextNode(`${!box3.getAnimations().length ? "PASS" : "FAIL"} - Animation is not running on box3.`)); | |
| }) | |
| }); | |
| } | |
| window.addEventListener('DOMContentLoaded', addKeyframes, false); | |
| </script> | |
| </head> | |
| <body> | |
| This test performs an animation of the left property. It should stop for 100ms at 100px and 200px | |
| We test for those values 50ms after it has stopped at each position. The animations for the three | |
| boxes are inserted by JavaScript. The first box's keyframes remain in the stylesheet. The second | |
| box's keyframes are removed after its animation starts (but it should animate). The third box's | |
| keyframes are removed before its animation starts, and it should not animate. | |
| <div class="box" id="box1"> | |
| </div> | |
| <div class="box" id="box2"> | |
| </div> | |
| <div class="box" id="box3"> | |
| </div> | |
| <div id="result"> | |
| </div> | |
| </body> | |
| </html> |