<html class="reftest-wait">
<title>Animation effect delays should be accounted for when using a progress based timeline</title>
<link rel="help" href="https://drafts.csswg.org/scroll-animations/">
<meta name="assert" content="Effect delay should be accounted for by progress based animations">
<link rel="match" href="progress-based-effect-delay-ref.html">

<script src="/web-animations/testcommon.js"></script>
<script src="/common/reftest-wait.js"></script>

<style>
  #box {
    width: 100px;
    height: 100px;
    background-color: green;
  }

  #covered {
    width: 100px;
    height: 100px;
    background-color: red;
  }

  #scroller {
    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"><p>Scrolling Contents</p></div>
</div>
<script>
  const box = document.getElementById('box');
  const effect = new KeyframeEffect(box,
    [
    { transform: 'translateY(0)', opacity: 1},
    { transform: 'translateY(200px)', opacity: 0}
    ], {
      delay: 1000,
      duration: 1000
    }
  );

  const scroller = document.getElementById('scroller');
  const timeline = new ScrollTimeline(
      { source: scroller, orientation: 'block' });
  const animation = new Animation(effect, timeline);

  animation.play();

  animation.ready.then(() => {
    // Move the scroller to the halfway point.
    const maxScroll = scroller.scrollHeight - scroller.clientHeight;
    scroller.scrollTop = 0.75 * maxScroll;

    waitForAnimationFrames(2).then(_ => {
        takeScreenshot();
    });
  });
</script>
