| <!DOCTYPE html> |
| <title>Multiple effects on same target driven by individual local time</title> |
| <link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> |
| |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/web-animations/testcommon.js"></script> |
| <script src="common.js"></script> |
| |
| <style> |
| #target { |
| width: 100px; |
| height: 100px; |
| background-color: green; |
| } |
| #target2 { |
| width: 100px; |
| height: 100px; |
| background-color: blue; |
| box-shadow: 4px 4px 25px blue; |
| } |
| </style> |
| |
| <div id="target"></div> |
| |
| <script id="simple_animate" type="text/worklet"> |
| registerAnimator("test_animator", class { |
| animate(currentTime, effect) { |
| let effects = effect.getChildren(); |
| effects[0].localTime = 0; |
| effects[1].localTime = 1000; |
| } |
| }); |
| </script> |
| |
| <script> |
| promise_test(async t => { |
| await runInAnimationWorklet(document.getElementById('simple_animate').textContent); |
| |
| const effect = new KeyframeEffect( |
| document.getElementById("target"), |
| [ |
| { background: 'green' }, |
| { background: 'blue' }, |
| ], |
| { duration: 2000 } |
| ); |
| const effect2 = new KeyframeEffect( |
| document.getElementById("target"), |
| [ |
| { width: '100px' }, |
| { width: '200px' } |
| ], |
| { duration: 2000 } |
| ); |
| |
| const animation = new WorkletAnimation('test_animator', [effect, effect2]); |
| animation.play(); |
| await waitForAsyncAnimationFrames(1); |
| |
| assert_equals(getComputedStyle(document.getElementById('target')).backgroundColor, "rgb(0, 128, 0)"); |
| assert_equals(getComputedStyle(document.getElementById('target')).width, "150px"); |
| }, `Animating multiple effects on the same target using effect specific local time should output values |
| relative to each effects unique local time`); |
| </script> |