@@ -859,7 +859,37 @@ The ''jump-*'' keywords values are illustrated below:
859
859
</figcaption>
860
860
</figure>
861
861
862
- </dl>
862
+
863
+
864
+
865
+ <h4 id=steps-serialization>
866
+ Serializing</h4>
867
+
868
+ Unlike the other [=easing function=] keywords,
869
+ ''step-start'' and ''step-end'' <em> do not</em> serialize as themselves.
870
+ Instead, they serialize as "steps(1, start)" and "steps(1)", respectively.
871
+
872
+ <div algorithm>
873
+ To <dfn export>serialize a steps() functions</dfn> :
874
+
875
+ 1. Let |s| be the string "steps(".
876
+
877
+ 2. Serialize the function's [=steps()/steps=] ,
878
+ and append it to |s|.
879
+
880
+ 3. If the function's [=steps()/step position=] is ''end'' or ''jump-end'' ,
881
+ append ")" to |s| and return |s|.
882
+
883
+ 4. Otherwise, append ", " to |s|.
884
+ Serialize the [=steps()/step position=] as a keyword,
885
+ and append the result to |s|.
886
+ Append ")" to |s|.
887
+ Return |s|.
888
+ </div>
889
+
890
+ <wpt>
891
+ timing-functions-syntax-computed.html
892
+ </wpt>
863
893
864
894
<h4 id=step-easing-algo oldids=step-timing-function-algo>
865
895
Output</h4>
@@ -881,9 +911,9 @@ Output</h4>
881
911
each with an associated value,
882
912
as follows:
883
913
884
- 1. [-∞, 0] has the value 0.
885
- 2. ( 1, ∞] has the value 1.
886
- 3. [0, 1] is divided into |steps| intervals,
914
+ 1. [-∞, 0) has the value 0.
915
+ 2. [ 1, ∞] has the value 1.
916
+ 3. [0, 1) is divided into |steps| half-open intervals,
887
917
[0, ...) to [..., 1)
888
918
with their values assigned as defined for the |position|
889
919
(see <<step-position>> ).
@@ -896,125 +926,10 @@ Output</h4>
896
926
for the interval that |inputProgress| is in.
897
927
</div>
898
928
899
- <div class=example>
900
-
901
- As an example of how the [=before flag=] affects the behavior of this function,
902
- consider an animation with a [=step easing function=] whose [=step
903
- position=] is <a value for="steps()">start</a> and which has a positive
904
- delay and backwards fill.
905
-
906
- For example, using CSS animation:
907
-
908
- <pre class='lang-css'>
909
- animation: moveRight 5s 1s steps(5, start);
910
- </pre>
911
-
912
- During the delay phase, the [=input progress value=] will be zero but if the
913
- [=before flag=] is set to indicate that the animation has yet to reach its
914
- animation interval, the easing function will produce zero as its [=output
915
- progress value=] , i.e. the bottom of the first step.
916
-
917
- At the exact moment when the animation interval begins, the [=input progress
918
- value=] will still be zero, but the [=before flag=] will not be set and hence
919
- the result of the easing function will correspond to the top of the first step.
920
- </div>
921
-
922
- For the purposes of calculating the [=output progress value=] , the
923
- [=step position=] <a value for="steps()">start</a> is considered equivalent to
924
- <a value for="steps()">jump-start</a> .
925
- Likewise <a value for="steps()">end</a> is considered equivalent to <a value
926
- for="steps()">jump-end</a> .
927
- As a result, the following algorithm does not make explicit reference to
928
- <a value for="steps()">start</a> or <a value for="steps()">end</a> .
929
-
930
- Note: User agents must still differentiate between
931
- <a value for="steps()">jump-start</a> and <a value for="steps()">start</a> for
932
- the purpose of serialization (see [[#serialization]] ).
933
-
934
- The [=output progress value=] is calculated from the [=input progress value=]
935
- and [=before flag=] as follows:
936
-
937
- 1. Calculate the <var> current step</var> as
938
- <code> floor([=input progress value=] × [=steps=] )</code> .
939
-
940
- 1. If the [=step position=] property is one of:
941
-
942
- * <a value for="steps()">jump-start</a> ,
943
- * <a value for="steps()">jump-both</a> ,
944
-
945
- increment <var> current step</var> by one.
946
-
947
- 1. If <em> both</em> of the following conditions are true:
948
-
949
- * the [=before flag=] is set, <em> and</em>
950
- * [=input progress value=] × [=steps=] mod 1 equals zero
951
- (that is, if [=input progress value=] × [=steps=] is
952
- integral), then
953
-
954
- decrement <var> current step</var> by one.
955
-
956
- 1. If [=input progress value=] ≥ 0 and <var> current step</var> < 0,
957
- let <var> current step</var> be zero.
958
-
959
- 1. Calculate |jumps| based on the [=step position=] as follows:
960
-
961
- : <a value for="steps()">jump-start</a> or
962
- <a value for="steps()">jump-end</a>
963
- :: [=steps=]
964
- : <a value for="steps()">jump-none</a>
965
- :: [=steps=] - 1
966
- : <a value for="steps()">jump-both</a>
967
- :: [=steps=] + 1
968
-
969
- 1. If [=input progress value=] ≤ 1 and <var> current step</var> >
970
- |jumps|, let <var> current step</var> be |jumps|.
971
-
972
- <div class=note>
973
-
974
- Steps 4 and 6 in this procedure ensure that given an [=input progress
975
- value=] in the range [0, 1] , a step easing function does not produce an
976
- [=output progress value=] outside that range.
977
-
978
- For example, although mathematically we might expect that a step easing
979
- function with a [=step position=] of <a value for="steps()">jump-start</a>
980
- would step up (i.e. beyond 1) when the [=input progress value=] is 1,
981
- intuitively,
982
- when we apply such an easing function to a forwards-filling animation,
983
- we expect it to produce an [=output progress value=] of 1
984
- as the animation fills forwards.
985
-
986
- A similar situation arises for a step easing function with
987
- a [=step position=] of <a value for="steps()">jump-end</a>
988
- when applied to an animation during its delay phase.
989
-
990
- </div>
991
-
992
- 1. The [=output progress value=] is <code><var> current step</var> /
993
- |jumps|</code> .
994
-
995
929
<wpt>
996
930
step-timing-functions-output.html
997
931
</wpt>
998
932
999
- <h3 id=serialization oldids=serializing-a-timing-function>Serialization</h3>
1000
-
1001
- Easing functions are serialized using the common serialization patterns
1002
- defined in [[CSSOM]] with the following additional requirements:
1003
-
1004
- * Step easing functions, whether they are specified using the
1005
- ''steps()'' function or either of the ''step-start'' or ''step-end''
1006
- keywords, are serialized as follows:
1007
-
1008
- 1. If the [=step position=] is ''jump-end'' or ''end'' , serialize
1009
- as <a lt="steps()" function>steps(<integer>)</a> .
1010
-
1011
- 2. Otherwise, serialize as <a lt="steps()"
1012
- function>steps(<integer>, <step-position>)</a> .
1013
-
1014
- <wpt>
1015
- timing-functions-syntax-computed.html
1016
- </wpt>
1017
-
1018
933
<h2 class=no-num id=privacy>Privacy Considerations</h2>
1019
934
1020
935
<!-- Horizontal review wants Security and Privacy sections to be separate. -->
0 commit comments