@@ -347,6 +347,59 @@ spec: cssom-view-1; type: dfn;
347
347
In the Web Animations API,
348
348
they can be represented anonymously by a {{ViewTimeline}} object.
349
349
350
+ ## View Progress Timeline Ranges ## {#view-timelines-ranges}
351
+
352
+ [=View progress timelines=] define the following [=named timeline ranges=] :
353
+
354
+ <dl dfn-for="animation-timeline-range" dfn-type="value">
355
+ <dt> <dfn>cover</dfn>
356
+ <dd>
357
+ Represents the full range of the [=view progress timeline=] :
358
+ * 0% progress represents the position at which
359
+ the [=start=] [=border edge=] of the element’s [=principal box=]
360
+ coincides with the [=end=] edge of its [=view progress visibility range=] .
361
+ * 100% progress represents the position at which
362
+ the [=end=] [=border edge=] of the element’s [=principal box=]
363
+ coincides with the [=start=] edge of its [=view progress visibility range=] .
364
+
365
+ <dt> <dfn>contain</dfn>
366
+ <dd>
367
+ Represents the range during which the [=principal box=]
368
+ is either fully contained by, or fully covers,
369
+ its [=view progress visibility range=] within the [=scrollport=] .
370
+ * 0% progress represents the earlier position at which:
371
+ * the [=start=] [=border edge=] of the element’s [=principal box=]
372
+ coincides with the [=start=] edge of its [=view progress visibility range=] .
373
+ * the [=end=] [=border edge=] of the element’s [=principal box=]
374
+ coincides with the [=end=] edge of its [=view progress visibility range=] .
375
+ * 100% progress represents the later position at which:
376
+ * the [=start=] [=border edge=] of the element’s [=principal box=]
377
+ coincides with the [=start=] edge of its [=view progress visibility range=] .
378
+ * the [=end=] [=border edge=] of the element’s [=principal box=]
379
+ coincides with the [=end=] edge of its [=view progress visibility range=] .
380
+
381
+ <dt> <dfn>entry</dfn>
382
+ <dd>
383
+ Represents the range during which the [=principal box=]
384
+ is entering the [=view progress visibility range=] .
385
+ * 0% is equivalent to 0% of the ''animation-timeline-range/cover'' range.
386
+ * 100% is equivalent to 0% of the ''animation-timeline-range/contain'' range.
387
+
388
+ ISSUE: Should this be ''entry'' or ''enter'' ?
389
+
390
+ <dt> <dfn>exit</dfn>
391
+ <dd>
392
+ Represents the range during which the [=principal box=]
393
+ is exiting the [=view progress visibility range=] .
394
+ * 0% is equivalent to 100% of the ''animation-timeline-range/contain'' range.
395
+ * 100% is equivalent to 100% of the ''animation-timeline-range/cover'' range.
396
+ </dl>
397
+
398
+ ISSUE: Insert diagrams.
399
+
400
+ In all cases, the [=writing mode=] used to resolve the [=start=] and [=end=] sides
401
+ is the [=writing mode=] of the relevant [=scroll container=] .
402
+
350
403
## Anonymous View Progress Timelines ## {#view-timelines-anonymous}
351
404
352
405
### The {{ViewTimeline}} Interface ### {#viewtimeline-interface}
@@ -602,3 +655,146 @@ spec: cssom-view-1; type: dfn;
602
655
In such cases, the rendered scroll offset
603
656
and the state of a scroll-driven animation
604
657
may be inconsistent in the composited frame.
658
+
659
+ # Appendix A: Named Timeline Ranges # {#timeline-ranges}
660
+
661
+ ISSUE: This section should move to CSS-ANIMATIONS-2 and WEB-ANIMATIONS-2.
662
+
663
+ This specification introduces the concept of [=named timeline ranges=]
664
+ to <a href="https://www.w3.org/TR/css-animations/">CSS Animations</a>
665
+ and <a href="https://www.w3.org/TR/web-animations/">Web Animations</a> .
666
+
667
+ A <dfn export>named timeline range</dfn>
668
+ is a named segment of an animation [=timeline=] .
669
+ The start of the segment is represented as 0% progress through the range;
670
+ the end of the segment is represented as 100% progress through the range.
671
+ Multiple [=named timeline ranges=] can be attached to a given [=timeline=] ,
672
+ and multiple such ranges can overlap.
673
+ For example, the ''animation-timeline/contain'' range of a [=view progress timeline=]
674
+ overlaps with its ''animation-timeline/cover'' range.
675
+ [=Named timeline ranges=] are represented by
676
+ the <dfn><<timeline-range-name>></dfn> value type,
677
+ which indicates a [=CSS identifier=] representing
678
+ one of the predefined [=named timeline ranges=] .
679
+
680
+ Note: In this specification, [=named timeline ranges=]
681
+ must be defined to exist by a specification
682
+ such as [[SCROLL-ANIMATIONS-1]] .
683
+ A future level may introduce APIs for authors to declare
684
+ their own custom [=named timeline ranges=] .
685
+
686
+ ## Named Timeline Range Keyframe Selectors ## {#named-range-keyframes}
687
+
688
+ [=Named timeline range=] names and percentages
689
+ can be used to attach keyframes
690
+ to specific progress points within the [=named timeline range=] .
691
+ The CSS ''@keyframes'' rule is extended thus:
692
+
693
+ <pre class="prod">
694
+ <<keyframe-selector>> = from | to | <<percentage>> | <<timeline-range-name>> <<percentage>>
695
+ </pre>
696
+
697
+ where <<timeline-range-name> is the [=CSS identifier=]
698
+ that represents a chosen predefined [=named timeline range=] ,
699
+ and the <<percentage>> after it represents the percentage progress
700
+ between the start and end of that [=named timeline range=] .
701
+
702
+ Keyframes are attached to the specified point in the timeline.
703
+ If the timeline does not have a corresponding [=named timeline range=] ,
704
+ then any keyframes attached to points on that [=named timeline range=]
705
+ are ignored.
706
+
707
+ ## Attaching Animations to Timeline Ranges ## {#named-range-animation-declaration}
708
+
709
+ A set of animation keyframes can be attached
710
+ in reference to [=named timeline ranges=]
711
+ by adjusting the duration of the animation.
712
+
713
+ <pre class="propdef shorthand">
714
+ Name : animation-delay, animation-range
715
+ Value : [ <<'animation-delay-start'>> <<'animation-delay-end'>>? | <<timeline-range-name>> ]#
716
+ </pre>
717
+
718
+ The 'animation-delay' and 'animation-range' properties
719
+ are both [=shorthand property|shorthands=]
720
+ that set 'animation-delay-start' and 'animation-delay-end'
721
+ together in a single declaration.
722
+ If the <<'animation-delay-end'>> value is omitted,
723
+ it is set to zero.
724
+ If a <<timeline-range-name>> alone is specified,
725
+ 'animation-delay-start' is set to that name plus ''0%''
726
+ and 'animation-delay-end' is set to that name plus ''100%'' .
727
+
728
+ <pre class="propdef">
729
+ Name : animation-delay-start
730
+ Value : [ <<time>> | <<timeline-range-name>> <<percentage>>
731
+ Initial : 0s
732
+ Applies to : all elements
733
+ Inherited : no
734
+ Percentages : relative to the specified [=named timeline range=]
735
+ Computed value : list, each item either a duration or a timeline range and progress percentage
736
+ Animatable : no
737
+ </pre>
738
+
739
+ Defines a delay between the start of the animation
740
+ and when it begins executing
741
+ (i.e. when keyframes attached to 0% progress are mapped).
742
+
743
+ <dl dfn-for="animation-delay-start, animation-delay-end" dfn-type=value>
744
+ <dt> <dfn><<time>></dfn>
745
+ <dd>
746
+ Defines the delay as a duration. See [[CSS-ANIMATIONS-1]] .
747
+ <dt> <dfn><<timeline-range-name>> <<percentage>></dfn>
748
+ <dd>
749
+ Calculates the delay as the difference between
750
+ the start of the animation
751
+ and the specified point on the [=timeline=] .
752
+ </dl>
753
+
754
+ <pre class="propdef">
755
+ Name : animation-delay-end
756
+ Value : [ <<time>> | <<timeline-range-name>> <<percentage>>
757
+ Initial : 0s
758
+ Applies to : all elements
759
+ Inherited : no
760
+ Percentages : relative to the specified [=named timeline range=]
761
+ Computed value : list, each item either a duration or a timeline range and progress percentage
762
+ Animatable : no
763
+ </pre>
764
+
765
+ Defines a delay between the end of the animation
766
+ and when it ends executing
767
+ (i.e. when keyframes attached to 100% progress are mapped).
768
+ Values are as for 'animation-delay-start' ,
769
+ but calculating backwards from the end,
770
+ i.e. a ''2s'' delay effectively shortens the animation duration,
771
+ whereas ''-2s'' lengthens it.
772
+
773
+ ## Reporting Timeline Range Progress: the ''getTime()'' method ## {#named-range-getTime}
774
+
775
+ Progress through named ranges is exposed on the {{AnimationTimeline}} object
776
+ by the {{AnimationTimeline/getCurrentTime()}} method:
777
+
778
+ <pre class="idl">
779
+ [Exposed=Window]
780
+ interface AnimationTimeline {
781
+ readonly attribute CSSNumberish? currentTime;
782
+ CSSNumericValue? getCurrentTime(optional CSSOMString rangeName);
783
+ };
784
+ </pre>
785
+
786
+ <dl class=methods dfn-type=method dfn-for="AnimationTimeline">
787
+ <dt> <dfn>getCurrentTime(rangeName)</dfn>
788
+ <dd>
789
+ If a rangeName is provided,
790
+ and is a valid [=named timeline range=] on this {{AnimationTimeline}} ,
791
+ returns the percentage progress through that range.
792
+
793
+ If a rangeName is provided,
794
+ and is not a valid [=named timeline range=] on this {{AnimationTimeline}} ,
795
+ returns null.
796
+
797
+ If a rangeName is not provided,
798
+ returns {{AnimationTimeline/currentTime}} ,
799
+ representing any time-based value using milliseconds (''ms'' ).
800
+ </dl>
0 commit comments