File: animation-trigger-late-attached-timeline.tentative.html

package info (click to toggle)
firefox 143.0.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,617,328 kB
  • sloc: cpp: 7,478,492; javascript: 6,417,157; ansic: 3,720,058; python: 1,396,372; xml: 627,523; asm: 438,677; java: 186,156; sh: 63,477; makefile: 19,171; objc: 13,059; perl: 12,983; yacc: 4,583; cs: 3,846; pascal: 3,405; lex: 1,720; ruby: 1,003; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 53; csh: 10
file content (93 lines) | stat: -rw-r--r-- 3,269 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<!DOCTYPE html>
<html>
  <head>
    <link rel="help" src="https://drafts.csswg.org/css-animations-2/#animation-trigger">
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="/web-animations/testcommon.js"></script>
    <script src="/dom/events/scrolling/scroll_support.js"></script>
    <script src="support/support.js"></script>
  </head>
  <body>
    <style>
      @keyframes myAnim {
        from { transform: scaleX(1); }
        to { transform: scaleX(5); }
      }
      .subject, .target {
        height: 50px;
        width: 50px;
        background-color: red;
      }
      .target {
        animation: myAnim linear 0.5s forwards;
        animation-trigger: once 150px 200px;
      }
      .deferred.subject {
        view-timeline: --viewtimeline;
      }
      .scroller {
        overflow-y: scroll;
        height: 500px;
        width: 500px;
        border: solid 1px;
        position: relative;
      }
      #wrapper {
        timeline-scope: --viewtimeline;
      }
      #space {
        width: 50px;
        height: 600px;
      }
    </style>
    <div id="wrapper">
      <div id="scroller" class="scroller">
        <div id="space"></div>
        <div id="deferred_subject" class="deferred subject"></div>
        <div id="space"></div>
      </div>
      <div id="target" class="target"></div>
    </div>
    <script>
      // The trigger and exit ranges are the same for this test.
      const CSS_TRIGGER_START_PX = 150;
      const CSS_TRIGGER_END_PX = 200;

      promise_test(async (test) => {
        const COVER_START_OFFSET = 100;

        const rangeBoundaries = getRangeBoundariesForTest(
                                      COVER_START_OFFSET + CSS_TRIGGER_START_PX,
                                      COVER_START_OFFSET + CSS_TRIGGER_END_PX,
                                      COVER_START_OFFSET + CSS_TRIGGER_START_PX,
                                      COVER_START_OFFSET + CSS_TRIGGER_END_PX,
                                      scroller);
        const animation = target.getAnimations()[0];
        await waitForAnimationFrames(5);
        // The animation is currently associated with the document timeline and
        // would automatically run. Cancel it.
        animation.cancel();

        // Enter the trigger range. Since it is not yet associated with the
        // view timeline, this should have no effect.
        await rangeBoundaries.enterTriggerRange();
        await waitForAnimationFrames(5);

        // Now attach a view timeline. Since we are in the trigger range, we
        // should trigger.
        await testAnimationTrigger(test, async () => {
          target.style.animationTriggerTimeline = "--viewtimeline";
          await waitForAnimationFrames(5);
        }, target, ["animationstart", "animationend", "animationcancel"],
           [true, true, false]);

        assert_equals(animation.playState, "finished",
           "animation was run when its trigger was attached to a view " +
           " timeline inside the trigger range.");

        // TODO: Add a test which switches the timeline of the trigger.
      }, "late-attached trigger timeline plays animation");
    </script>
  </body>
</html>