tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

animation-events.html (2606B)


      1 <!DOCTYPE html>
      2 <html id="top">
      3 <meta charset="utf-8">
      4 <title>View timeline delay</title>
      5 <link rel="help" href="https://drafts.csswg.org/scroll-animations-1/#events">
      6 <script src="/resources/testharness.js"></script>
      7 <script src="/resources/testharnessreport.js"></script>
      8 <script src="/web-animations/testcommon.js"></script>
      9 <style>
     10  #container {
     11    border:  10px solid lightgray;
     12    overflow: auto;
     13    height:  200px;
     14    width: 200px;
     15  }
     16  .spacer {
     17    height: 400px;
     18  }
     19  #target {
     20    background-color:  green;
     21    height:  100px;
     22  }
     23 </style>
     24 <body>
     25  <div id="container">
     26    <div class="spacer"></div>
     27    <div id="target"></div>
     28    <div class="spacer"></div>
     29  </div>
     30 </body>
     31 <script type="text/javascript">
     32  const keyframes = {transform: ['translateX(0)', 'translateX(100px)']};
     33  let target = document.getElementById('target');
     34  let scroller = document.querySelector('#container');
     35  let timeline = new ViewTimeline({subject: target});
     36  promise_test(async t => {
     37    let animation = target.animate(keyframes, {
     38      timeline,
     39      fill: 'both'
     40    });
     41    scroller.scrollTo({top: 0});
     42    await waitForCompositorReady();
     43    let finishedPromise = animation.finished;
     44    let finished = false;
     45    let finishEvents = 0;
     46    finishedPromise.then(() => {
     47      finished = true;
     48    });
     49    animation.addEventListener('finish', () => { finishEvents++; });
     50 
     51    scroller.scrollTo({top: 100});
     52    await waitForNextFrame();
     53    assert_false(finished, "Animation is not finished before starting");
     54    assert_equals(finishEvents, 0, "No finish event before scrolling");
     55 
     56    scroller.scrollTo({top: 400});
     57    await waitForNextFrame();
     58    assert_false(finished, "Animation is not finished while active");
     59    assert_equals(finishEvents, 0, "No finish event while active");
     60 
     61    scroller.scrollTo({top: 600});
     62    await waitForNextFrame();
     63    assert_true(finished, "Animation is finished after passing end");
     64    assert_equals(finishEvents, 1, "A finish event is generated after end");
     65 
     66    scroller.scrollTo({top: 400});
     67    await waitForNextFrame();
     68    assert_not_equals(finishedPromise, animation.finished,
     69        "A new finish promise is created when back in active range");
     70    finished = false;
     71    animation.finished.then(() => {
     72      finished = true;
     73    });
     74 
     75    scroller.scrollTo({top: 600});
     76    await waitForNextFrame();
     77    assert_true(finished, "Finishes after passing end");
     78    assert_equals(finishEvents, 2, "Another finish event is generated after end");
     79    animation.cancel();
     80  }, 'View timeline generates and resolves finish promises and events' );
     81 
     82 
     83 </script>