| <!doctype html> |
| <meta charset=utf-8> |
| <title>Changes to @keyframes rules</title> |
| <link rel="help" href="https://drafts.csswg.org/css-animations-1/"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="support/testcommon.js"></script> |
| <div id="log"></div> |
| <script> |
| 'use strict'; |
| |
| test(t => { |
| const div = addDiv(t); |
| |
| const originalStyleElement = document.createElement("style"); |
| originalStyleElement.textContent = '@keyframes anim-custom { from, to { left: 100px } }'; |
| document.head.appendChild(originalStyleElement); |
| |
| t.add_cleanup(() => originalStyleElement.remove()); |
| |
| div.style.animation = 'anim-custom 100s'; |
| |
| const computedStyle = getComputedStyle(div); |
| assert_equals(computedStyle.left, "100px", "The initial @keyframes rule is applied"); |
| |
| // Remove the original style element and add a new one with an animation with the same name. |
| const newStyleElement = document.createElement("style"); |
| newStyleElement.textContent = '@keyframes anim-custom { from, to { left: 200px } }'; |
| originalStyleElement.replaceWith(newStyleElement); |
| |
| t.add_cleanup(() => newStyleElement.remove()); |
| |
| assert_equals(computedStyle.left, "200px", "The new @keyframes rule is applied"); |
| }, 'Replacing a <style> element with a new <style> element while both containing the different @keyframes rule with the same name dynamically updates running animations.'); |
| |
| </script> |