| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1"> |
| <title>View Timeline attached to an SVG graphics element (<foreignObject>)</title> |
| </head> |
| <style type="text/css"> |
| @keyframes color { |
| from { color: rgb(0, 0, 254); } |
| to { color: rgb(0, 128, 0); } |
| } |
| |
| #fo { |
| animation: color auto linear both; |
| animation-timeline: view(); |
| animation-range: exit-crossing; |
| } |
| .spacer { |
| height: 100vh; |
| } |
| </style> |
| <body> |
| <svg width="100" height="3000" color="red"> |
| <foreignObject id="fo" x="47.5" width="3000" height="5" |
| transform="rotate(90, 47.5, 0)"> |
| <div style="width: 100%; height: 200%; background-color: currentcolor"></div> |
| </foreignObject> |
| </svg> |
| <div class="spacer"></div> |
| </body> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/web-animations/testcommon.js"></script> |
| <script> |
| promise_test(async t => { |
| const scroller = document.scrollingElement; |
| const target = document.getElementById('fo'); |
| const anim = target.getAnimations()[0]; |
| await anim.ready; |
| assert_equals(getComputedStyle(target).color, 'rgb(0, 0, 254)'); |
| scroller.scrollTop = |
| 0.5*(scroller.scrollHeight - scroller.clientHeight); |
| await waitForNextFrame(); |
| assert_equals(getComputedStyle(target).color, 'rgb(0, 64, 127)'); |
| }, 'View timeline attached to SVG graphics element'); |
| </script> |
| </html> |