| <html class="reftest-wait"> | |
| <title>Basic use of scroll timeline with WorkletAnimation</title> | |
| <link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> | |
| <meta name="assert" content="Should be able to use the scroll timeline to drive the worklet animation timing"> | |
| <link rel="match" href="worklet-animation-with-scroll-timeline-ref.html"> | |
| <script src="/web-animations/testcommon.js"></script> | |
| <script src="/common/reftest-wait.js"></script> | |
| <script src="common.js"></script> | |
| <style> | |
| #box { | |
| width: 100px; | |
| height: 100px; | |
| background-color: green; | |
| } | |
| #covered { | |
| width: 100px; | |
| height: 100px; | |
| background-color: red; | |
| } | |
| /* Hide scrollbars to avoid unnecessary visual issues related to them */ | |
| #scroller::-webkit-scrollbar { | |
| display: none; | |
| } | |
| #scroller { | |
| scrollbar-width: none; | |
| overflow: auto; | |
| height: 100px; | |
| width: 100px; | |
| will-change: transform; /* force compositing */ | |
| } | |
| #contents { | |
| height: 1000px; | |
| width: 100%; | |
| } | |
| </style> | |
| <div id="box"></div> | |
| <div id="covered"></div> | |
| <div id="scroller"> | |
| <div id="contents"></div> | |
| </div> | |
| <script> | |
| registerPassthroughAnimator().then(() => { | |
| const box = document.getElementById('box'); | |
| const effect = new KeyframeEffect(box, | |
| [ | |
| { transform: 'translateY(0)', opacity: 1 }, | |
| { transform: 'translateY(200px)', opacity: 0 } | |
| ], { | |
| duration: 1000, | |
| } | |
| ); | |
| const scroller = document.getElementById('scroller'); | |
| const timeline = new ScrollTimeline({ scrollSource: scroller, orientation: 'block' }); | |
| const animation = new WorkletAnimation('passthrough', effect, timeline); | |
| animation.play(); | |
| // Move the scroller to the halfway point. | |
| const maxScroll = scroller.scrollHeight - scroller.clientHeight; | |
| scroller.scrollTop = 0.5 * maxScroll; | |
| waitForAsyncAnimationFrames(1).then(_ => { | |
| takeScreenshot(); | |
| }); | |
| }); | |
| </script> |