| <!DOCTYPE html> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| <style> |
| #box { |
| position: relative; |
| height: 100px; |
| width: 100px; |
| background-color: blue; |
| animation-name: anim; |
| animation-duration: 1s; |
| animation-delay: -0.5s; |
| animation-play-state: paused; |
| animation-timing-function: linear; |
| } |
| |
| @keyframes anim { |
| from { left: 100px; } |
| to { left: 200px; } |
| } |
| </style> |
| <div id="box"></div> |
| <script> |
| function findKeyframesRule(rule) { |
| var ss = document.styleSheets; |
| for (var i = 0; i < ss.length; ++i) { |
| for (var j = 0; j < ss[i].cssRules.length; ++j) { |
| if (ss[i].cssRules[j].type == CSSRule.KEYFRAMES_RULE && |
| ss[i].cssRules[j].name == rule) { |
| return ss[i].cssRules[j]; |
| } |
| } |
| } |
| |
| return null; |
| } |
| |
| test(function() { |
| var box = document.getElementById('box'); |
| |
| // The left property should be animating initially. |
| assert_equals(getComputedStyle(box).left, '150px', 'left'); |
| |
| // A forced style-recalc aborts the previous animation. |
| box.style.animationName = "none"; |
| assert_equals(getComputedStyle(box).left, '0px', 'left'); |
| |
| // Change keyframes. |
| var keyframes = findKeyframesRule("anim"); |
| keyframes.deleteRule("0%"); |
| keyframes.deleteRule("100%"); |
| keyframes.appendRule("0% { top: 50px; }"); |
| keyframes.appendRule("100% { top: 150px; }"); |
| box.style.animationName = "anim"; |
| |
| // The left property should reset and top should be animating. |
| assert_equals(getComputedStyle(box).left, '0px', 'left'); |
| assert_equals(getComputedStyle(box).top, '100px', 'top'); |
| }, "Check that changes to keyframe rules take effect"); |
| </script> |