1. 差分仕様
これは差分仕様(デルタ仕様)であり、現在はWeb Animations Level 1 [WEB-ANIMATIONS-1] との差分のみを記載しています。 Level 1の仕様が完成に近付いた際には、本書の追加事項と統合され、Level 2の完全な仕様となる予定です。
2. タイミングモデル
このセクションでは、Web Animationsのタイミングモデルの挙動を説明・定義します。
2.1. タイミングモデルの概要
このセクションは規範的ではありません
2.1.1. 階層構造
本仕様レベルでは更新されたタイミング階層図が含まれています。
また、以下の更新済み説明も付随します:
このような階層構造の結果として、複雑なアニメーション全体を単一の単位として逆再生したり、スケジューリング、加速などの操作が可能となります。これは、親ノードへの操作がその子孫ノードへカスケード的に反映されるためです。 さらに、全ての時刻が共通の基準から導かれるため、アニメーションの同期も容易です。
2.2. タイムライン
追加:
タイムラインのdurationは、そのタイムラインで生成可能な現在時刻の最大値を表します。この値は、アニメーションの対象エフェクトの固有反復時間を計算するのに使われます。特に効果のiteration durationが"auto"の場合は、対象のタイムラインと連動します。値は効果が利用可能な時間を埋めるように計算されます。単調増加なタイムラインの場合、現在時刻には上限がなく、タイムラインdurationは未解決となります。非単調(例:スクロール)タイムラインの場合、durationには固定上限があります。この場合、そのタイムラインは進捗ベースのタイムラインとなり、そのタイムラインdurationは100%となります。
2.3. アニメーションフレーム
アルゴリズムの最初のステップの注記に、次の項目を追加:
アニメーショントリガーの状態を、アニメーショントリガーに対してアニメーショントリガー状態の更新手続きを実行することで更新します。
2.4. アニメーション
追記:
進捗ベースのタイムラインに関連付けられたアニメーションエフェクトは、タイミング特性を割合(比率)に変換する必要があります。への変換手順は以下の通り:
iteration durationがautoの場合、次のステップを行います。
start delayとend delayを0に設定します。これは、時間と割合を混在させることができないためです。
注記: 将来のバージョンではこれらプロパティがパーセントで指定できるようになる可能性があり、その場合、値が時間の場合のみ無視されることになります。
それ以外の場合:
total timeをend timeとする。
start delayを
specified start delay / total time * timeline durationで評価した結果に設定する。iteration durationを
specified iteration duration / total time * timeline durationで評価した結果に設定する。end delayを
specified end delay / total time * timeline durationで評価した結果に設定する。指定タイミングの正規化手順は以下の通り:
timeline durationが解決済みの場合:
それ以外の場合:
start delay = specified start delay
end delay = specified end delay
iteration durationがautoの場合:
それ以外の場合:
iteration duration = specified iteration duration
2.4.1. アニメーションのタイムライン設定
アニメーションのタイムラインを設定(animationをnew timeline(null可)へ設定)の手順は以下の通り:
-
old timelineを、animationの現在のtimeline(存在すれば)とする。
-
もしnew timelineがold timelineと同一オブジェクトなら、この手順を中止する。
-
previous play stateをanimationの再生状態とする。
-
previous current timeをanimationの現在時刻とする。
-
previous progressを次の最初に該当する条件に基づいて設定:
-
from finite timelineをold timelineがnullではなく、かつ単調増加タイムラインでない場合trueとする。
-
to finite timelineをtimelineがnullでなく、かつ単調増加タイムラインでない場合trueとする。
-
animationのtimelineをnew timelineに設定する。
-
次のうち最初に一致する条件に対し該当するステップを実行:
- もしto finite timelineなら、
-
-
保留中再生レートの適用をanimationに対して行う
-
auto align start time を true に設定する。
-
start time を未解決に設定する。
-
hold time を未解決に設定する。
-
もしprevious play stateが"finished"または"running"であれば
-
pending play taskをスケジューリングする
-
-
もしprevious play stateが"paused"で、かつprevious progressが解決済みの場合:
この手順により、previous progressはpause-pending かつ開始時刻が解決済みな場合でも維持されます。
-
- もしfrom finite timelineであり、かつprevious progressが解決済みの場合、
-
もしanimationのstart timeが未解決であれば、animationのhold timeを未解決にする。
このステップは、finished play stateが“sticky”にならず、更新後の現在時刻に基づき再評価されることを保証します。
-
アニメーションの終了状態の更新手順を、did seekフラグfalse、synchronously notifyフラグfalseで実行する。
2.4.2. アニメーションのターゲットエフェクト設定
pending play taskを再スケジューリングする手順の後に、次のステップを追加:
new effectをanimationの関連エフェクトに割り当てる手順の後に、以下のステップを含める:
もしold effectが
nullでなければ、カスタムエフェクトの呼び出し対象である包括的な子孫すべてについて、old effectに未解決なiteration progressでコールバックするタスクをキューに入れる。※ old effect が同一タスク内で別のアニメーションに再びアタッチされた場合には、追加の未解決値でのコールバックは不要かもしれません。カスタムエフェクト呼び出しの正確なタイミング定義は見直しと再検討が必要です。
2.4.3. 関連エフェクトの待機
以下に置き換え:
アニメーションは、次の両方の条件が成立した最初の瞬間にreadyになる:
ユーザーエージェントがアニメーションの関連エフェクトの再生開始に必要な設定(キーフレームエフェクトの最初のフレームの描画など)を完了している。
次で置き換え:
アニメーションは、次のすべての条件が成立した最初の瞬間にreadyになる:
ユーザーエージェントがアニメーションの包括的な子孫ごとに、再生の準備に必要な設定(キーフレームエフェクトの最初のフレーム描画や、カスタムエフェクトの実行等)を完了している。
アニメーションのhold timeまたはstart timeが解決済み。
注: アニメーションは、ready ではありません。まだ 開始時刻 または 停止時刻 がない場合です。 スクロール駆動アニメーションについては、auto align start time が true の場合、 タイムラインを更新するときに開始時刻が決定されます。
2.4.4. CSSNumberish time の検証
CSSNumberish time を検証する手順は、入力値timeに対し最初に一致する条件に基づいて行います:
-
以下の条件がすべて満たされる場合:
-
アニメーションが進捗ベースのタイムラインに関連付けられている
-
time がパーセント単位の CSSNumeric 値でない
-
-
TypeError を throw する。
false を返す;
-
以下の条件がすべて満たされる場合:
-
アニメーションが進捗ベースのタイムラインに関連付けられていない
-
time が CSSNumericValue である
-
time の単位が duration unit でない
-
-
TypeError を throw する。
false を返す。
- それ以外の場合
-
true を返す。
2.4.5. Animation の現在時刻を設定する
アニメーションのcurrent timeは新しい値に設定でき、アニメーションをシークさせることができます。 現在時刻の設定手順は2つの部分に分かれて定義されています。
現在時刻を静かに設定する手順(アニメーションanimationの現在時刻をseek timeに設定)は次の通りです:
-
もしseek timeが未解決時刻値であれば、次を行う:
-
もしcurrent timeが解決済みなら TypeError を throw する。
-
この後の手順を中止する。
-
-
valid seek time を、CSSNumberish time を検証手順でseek timeを入力として実行した結果とする。
-
もしvalid seek timeが false なら、この手順を中止する。
-
auto align start time を false に設定する。
-
次の通りanimationのhold timeまたは start time を更新する:
-
いずれかの条件が true の場合:
-
animationのstart time が未解決である、または
-
animationに関連タイムラインが無いか、そのtimelineがinactive、または
-
animationのplayback rateが0
-
-
animationのhold timeをseek timeに設定する。
-
- それ以外の場合
-
animationのstart timeを
timeline time - (seek time / playback rate)で評価した結果に設定する。ただしtimeline timeはanimationに紐づくtimelineの現在time valueとする。
-
-
もしanimationに関連するtimeline が無いか、または関連 timeline がinactiveなら animationのstart timeを未解決にする。
これにより、アクティブなタイムラインが無い場合、start timeかcurrent timeのいずれかしか設定できないという不変条件が維持されます。
現在時刻を設定する手順(アニメーションanimationの現在時刻をseek timeに設定)は次の通りです:
-
現在時刻を静かに設定手順をanimationとseek timeで実行する。
-
もしanimationがpending pause taskを持つ場合、pause操作を次のステップですぐに完了する:
-
animationのhold timeをseek timeに設定する。
-
保留中再生レートを適用する。
-
animationのstart timeを未解決にする。
-
pending pause taskをキャンセルする。
-
resolve でanimationの current ready promiseをanimationで解決する。
-
-
アニメーションの終了状態の更新手順を animationに対してdid seekフラグtrue,synchronously notifyフラグfalseで実行する。
2.4.6. Animation の開始時刻を設定する
開始時刻を設定 手順(animation animation の開始時刻を new start time に設定)は以下の通り:
-
valid start time を、CSSNumberish time を検証手順で new start time を入力として実行した結果とする。
-
もし valid start time が false なら、この手順を中止する。
-
auto align start time を false に設定する。
-
timeline time を、animationに関連付けられた timeline の現在の time value とする。 animation に関連付けられたtimelineが 存在しないか、関連タイムラインがinactiveの場合は、 timeline timeを未解決とする。
-
もしtimeline timeが未解決かつnew start timeが解決済みなら、 animationのhold timeを未解決にする。
これにより、アクティブなタイムラインが存在しない場合、start timeか current timeのいずれかしか設定できないという不変条件が維持されます。
-
previous current time を animation の current time とする。
注記: これは、前ステップによりcurrent timeが 未解決になることもあるので、変更後の値となる。
-
保留中再生レートを適用する。
-
animation の start time を new start time に設定する。
-
animation の hold time を次の条件分岐で更新する:
-
もし animation が pending play task か pending pause task を持っていれば、それらをキャンセルし、 resolve で animation の current ready promise を animation で解決する。
-
アニメーションの終了状態の更新手順を animation に対して did seek フラグ true, synchronously notify フラグ false で実行する。
2.4.7. アニメーションの再生
アニメーションを再生する手順(animation、およびフラグauto-rewindを与える)は次の通り:
注記:auto-rewindフラグは、このモデルを基に構築されているが巻き戻し動作を必要としない他仕様、たとえばCSS Animations [CSS-ANIMATIONS-1]向けに用意されています。
-
aborted pause を、animationがpending pause taskを持つ場合にtrue、そうでなければfalseとなる論理値とする。
-
has pending ready promise を初期値falseの論理値フラグとする。
-
has finite timeline を、animationが関連付けられたtimelineを持ち、かつそれが単調増加でない場合にtrueとする。
-
previous current time を animation の current time とする。
-
enable seek を、auto-rewindフラグがtrueでかつhas finite timelineがfalseのときtrue、さもなければfalseとする。
-
次のうち最初に該当する条件に従って手順を実行:
-
もし animation のeffective playback rate > 0 かつ enable seek が true かつ、さらにいずれかの条件が成り立つ場合:
-
previous current time が未解決である、または
-
previous current time < 0、または
-
previous current time ≥ associated effect end
-
-
animation の hold time を 0 に設定する。
-
もし animation の effective playback rate < 0 かつ enable seek が true かつ、さらにいずれかの条件が成り立つ場合:
-
previous current time が未解決である、または
-
previous current time ≤ 0 、または
-
previous current time > associated effect end
-
-
- もし associated effect end が正の無限大の場合
-
InvalidStateError
DOMExceptionをスローし、この手順を中止する。 - それ以外の場合
-
animation の hold time を animation の associated effect end にする。
- もし animation のeffective playback rate = 0 かつ animation の current time が未解決の場合
-
animation の hold time を 0 に設定する。
-
-
もし has finite timeline が true かつ previous current time が未解決の場合:
-
フラグ auto align start time を true に設定する。
注記: CSSアニメーションでスタイル更新中にplayが呼ばれた場合、animation のstart timeはレイアウト後でないと確定できません(開始時刻はアニメーション範囲の先頭または末尾(playback rateに依存)に揃える必要があるため)。 この場合、アニメーションは開始時刻自動調整状態とされ、進行度をアニメーション範囲に合わせるように自動的に開始時刻が調整されます。
-
-
もし animation の hold time が解決済みの場合、 start time を未解決にする。
-
もし animation がpending play taskまたは pending pause taskを持つ場合
-
そのタスクをキャンセルする。
-
has pending ready promise を true に設定する。
-
-
以下の3条件が全て満たされる場合:
-
aborted pause が false である
-
animationがpending playback rateを持たない
この手順を中止する。
-
もし has pending ready promise が false なら animationのcurrent ready promiseをanimationのrelevant Realmで新しいpromiseとする。
-
animationがreadyになったらすぐ実行するタスクをスケジュールする。 タスクは以下のステップを実行する:
-
animationのstart timeか hold timeのいずれかが解決済みであることをアサートする。
-
ready timeを、animationに関連するtimelineが animationがready状態になった瞬間のtime valueとする。
-
次のいずれかに該当する場合、該当する条件ごとにステップを実行:
- もし animation のhold time が解決済みなら
-
-
保留中再生レートの適用をanimationに行う。
-
new start timeを
ready time - hold time / playback rateで計算する(ただし再生レート0の場合はnew start time=ready time)。 -
animation のstart time をnew start timeに設定する。
-
- もし animation のstart timeが解決済み、かつ animationがpending playback rateを持つ場合
-
-
current time to match を
(ready time - start time) × playback rateで計算する。 -
保留中再生レートの適用をanimationに行う。
-
再生レート0の場合はhold timeをcurrent time to matchに設定する。
-
new start time を
ready time - current time to match / playback rateで計算する(再生レート0の場合はready time)。 -
animationのstart timeをnew start timeに設定する。
-
-
resolveでanimationのcurrent ready promiseをanimationで解決する。
-
アニメーションの終了状態の更新手順を did seekフラグfalse, synchronously notifyフラグfalseで実行する。
上記2つの手順の順序が重要です。これにより、長さゼロの関連エフェクトを持つアニメーションはcurrent ready promiseをcurrent finished promiseより前に解決します。
上記タスクがスケジュール済みでまだ実行されていない間、animationは pending play taskを持つとみなします。 なおそのタスク実行中は、animationはpending play taskを持ちません。
ユーザーエージェントがanimationが即座にreadyであると判断した場合、上記タスクは マイクロタスクのチェックポイント で実行されるマイクロタスクとしてスケジュールしてよいが、同期的には実行してはならない。
上記要件は、次のようなコードがすべての実装で一貫した動作となることを保証します:
animation
. play(); animation. ready. then( () => { console. log( 'Playback commenced' ); }, () => { console. log( 'Playback was canceled' ); } ); // Suppose some condition requires playback to be canceled... animation. cancel(); // "Playback was canceled" will be printed to the console. もしpending play taskが同期的に実行されていれば、 current ready promiseはrejectされません。
-
-
アニメーションの終了状態の更新手順を did seekフラグfalse, synchronously notifyフラグfalseで実行する。
アニメーションを再生手順には、カスタムエフェクトの更新タスクをスケジューリングする処理も含める必要がある。
2.4.7.1. 開始時刻の自動調整
非単調タイムラインにアタッチされている場合、アニメーションの開始時刻はレイアウト依存となりうる。この場合、タイムラインがレイアウト後に更新されてから開始時刻の計算を行う。タイムラインの現在時刻が更新される時、関連付けられているアニメーションすべてのstart timeが条件に応じて更新される。 開始時刻自動調整の手順は以下の通り:
-
もしauto-align start timeフラグがfalseなら、この手順を中止する。
-
タイムラインがinactiveなら、この手順を中止する。
-
play stateがidleなら、この手順を中止する。
-
play stateがpausedかつhold timeが解決済みなら、この手順を中止する。
-
start offset をアニメーションattachment範囲の開始に対応する解決済みタイムライン時刻とする。 view timeline の場合、この計算はカバー範囲の比率に基づく。
-
end offset をアニメーションattachment範囲の終了に対応する解決済みタイムライン時刻とする。 view timeline の場合、この計算はカバー範囲の比率に基づく。
-
start timeを effective playback rateが0以上ならstart offset、 それ以外はend offsetに設定する。
-
hold timeをクリアする。
2.4.8. アニメーションの一時停止
アニメーションを一時停止する手順は、 関連エフェクトだけでなく、その関連エフェクトのすべての子孫にも参照する必要があります。
同様に、アニメーションの一時停止手順には カスタムエフェクトの更新タスクをスケジューリングすることも含める必要があります。seek time の設定に関する制約は単調タイムライン使用時のみに適用されるように更新してください。 スクロール駆動アニメーション では、アニメーション範囲が計算されるまで hold time の設定を遅延する必要があります。
次の記述を置き換え:
seek time を 最初はtime valueの 未解決状態とする。
has finite timeline を true とするのは、animation に関連付けられた タイムライン が 単調増加 でない場合である。
animation の current time が 未解決の場合、次のうち最初に該当する条件で手順を実行する:
- もしanimationのplayback rateが0以上なら
seek time を 0 にする。
- それ以外の場合
- もし associated effect end が正の無限大なら
InvalidStateError
DOMExceptionをthrowしこの手順を中止する。- それ以外の場合
seek time を animation の associated effect end にする。
seek time が 解決済みなら
- もし has finite timeline がtrueなら
animation の start time を seek time に設定する。
- それ以外の場合
animation の hold time を seek time に設定する。
次で置き換え:
has finite timeline を true とするのは、animation に関連付けられた タイムライン が 単調増加 でない場合である。
もし animation の 現在時刻 が 未解決 であり、かつ has finite timeline が false の場合、下記の最初に当てはまる条件に従って処理を行う:
- もし animation の 再生レート が 0 以上の場合
停止時刻 をゼロに設定する。
- それ以外の場合
- もし 関連エフェクトの終点 が animation に対して正の無限大である場合
"throw" "
InvalidStateError"DOMExceptionを送出して、これらの手続きを中止する。- それ以外の場合
停止時刻 を animation の 関連エフェクトの終点 に設定する。
もし has finite timeline が true かつ animation の 現在時刻 が 未解決 の場合
auto align start time フラグを true に設定する。
次の記述を置き換え:
次の2つの条件がともに成立した最初の瞬間にタスクをスケジュールする:
ユーザーエージェントが(もしあれば)アニメーションの関連エフェクト再生停止に必要な処理を完了していること。
アニメーションが非 inactive なタイムラインに関連付けられていること。
次で置き換え:
次のすべての条件が成立した最初の瞬間にタスクをスケジュールする:
ユーザーエージェントが(あれば)アニメーションの関連エフェクト再生停止に必要な処理を完了していること。
アニメーションが非 inactive なタイムラインに関連付けられていること。
アニメーションが解決済みの hold time または start time を持っていること。
注記: pause-pending なアニメーションでは auto-align start time フラグが true の場合、 start time が正しく範囲に揃うように必要です。 start time の設定は 開始時刻自動調整手順に従って行います。
2.4.9. アニメーションのキャンセル
最後のステップを追加:2.4.10. 速度制御
次の文を追記:
アニメーションエフェクトにも ここで定義されるものとは異なる挙動をする playback rate が 関連付けられていることに注意。
2.4.11. アニメーション全体の進行度の計算
アニメーションのoverallProgressは、 current timeと associated effect endの比率で定まる。
-
以下のいずれかに該当する場合:
-
animation に 関連エフェクト が無い、または
-
animationの current time が未解決時刻値である
-
-
animation の overallProgress は null。
- もし animation の associated effect end が0の場合
-
- もし animation の current time が負なら
-
animation の overallProgress は0。
- それ以外
-
animation の overallProgress は1。
- もし animation の associated effect end が無限大の場合
-
animation の overallProgress は0。
- それ以外
-
overallProgress = min(max(current time / animation の associated effect end, 0), 1)
2.5. アニメーション効果
次の文章を追加:
animation の関連エフェクトは そのアニメーションに直接関連付けられていると呼ばれます。
アニメーションエフェクトはグループエフェクトを用いて階層構造にまとめられます(§ 2.10 Grouping and synchronization参照)。 その階層のルート アニメーションエフェクトだけが 直接アニメーションに関連付けられます。 親グループを持つアニメーションエフェクトが アニメーションの関連エフェクトに指定される場合、 そのエフェクトは関連付け前に親グループから削除される。
アニメーションエフェクトは アニメーションに関連付けられる のは、それが直接関連であるか 祖先となるグループエフェクトが 直接アニメーションに関連付けられている場合です。
2.5.1. アニメーションエフェクトの種類
本仕様は2種類のアニメーションエフェクトを定義します:
2.5.2. 活動区間(アクティブインターバル)
この仕様レベルでは活動区間(active interval)の下限が次のように定義されます:
アクティブインターバルの下限は エフェクト開始時刻で決まり、 エフェクトのstart delay によって調整されることもあります。
続く図では animation effect start time(アニメーションエフェクト開始時刻)を animation start time(アニメーション開始時刻)の代わりに参照する必要があります。
end delay の記述も次のように更新されます:
end delay も指定可能ですが、 主にシーケンスエフェクトなどアニメーションの連鎖時に有用です。
規範的記述は次のように更新:
アクティブインターバルの下限は、エフェクトの 開始時刻とstart delayの組み合わせで決まる。
アニメーションエフェクトの 開始時刻は、そのエフェクトの親グループ(あれば)が エフェクトの開始をスケジュールした時点。表現単位は継承時刻。
ほとんどの場合(親グループがない場合を含む)は、この開始時刻は0となる。 唯一の例外はシーケンスエフェクトで、これについては § 2.10.4.1 Sequence effectの子の開始時刻に記載。
開始時刻に加えて、 アニメーションエフェクトは start delay という開始時刻からのオフセットも持つ。 開始時刻。
開始時刻が親グループによって決まるのに対し、 start delay はエフェクト自身のプロパティである。
アニメーションエフェクト(animation effect)の アクティブインターバルの下限(継承時刻空間で表現)は 開始時刻とstart delayの和である。
そしてend timeの定義に関しては次の通り:
アニメーションエフェクト のend timeは
max(開始時刻 + start delay + active duration + end delay, 0)で評価した結果とする。
2.5.3. ローカル時刻と継承時刻
この節は追加されました。
Web Animations では、すべての時刻は何らかの基準点に対する相対値として扱われます。 各基準点ごとに異なる 時刻空間 が生じます。
これはコンピュータグラフィックスで用いられる座標空間と比較できます。 時刻空間のゼロ時刻は、座標空間の原点に相当します。
座標空間と同様、時刻空間もネスト(入れ子)可能です。 グループエフェクトは多くの場合、 時刻値に 何らかの変形を加えて親 やアニメーションから受け取り、 その変形後の時刻値を子へ渡します。 子のアニメーション効果は、その変形後の時刻空間内で 動作します。
子は親から受け取った変形済み時刻値(これを継承時刻と呼ぶ)に 自身の開始時刻を加算し、下図のように 独自のローカル時刻空間 を確立します。
時刻tにおける継承時刻は 2.5。
アニメーション効果 (a) の 開始時刻が 1 の場合、 ローカル時刻は 1.5。
アニメーション効果 (b) は 開始時刻 1、および start delay 1 を持つが、 ローカル時刻も 1.5 になる。 これは ローカル時刻が アニメーション効果の 開始時刻だけを基準とし、 start delayは基準にしないからです。
アニメーション効果における、その時点での継承時刻は、次のいずれか最初に該当する条件で決まります:
- そのアニメーション効果が親グループを持つ場合
- そのアニメーション効果がアニメーションに直接関連付けられている場合
-
継承時刻は アニメーションのcurrent time です。
- それ以外の場合
-
継承時刻は未解決。
ローカル時刻は アニメーション効果の 継承時刻から開始時刻を引いた値です。 継承時刻が未解決の場合、 ローカル時刻も未解決となります。
2.5.4. アニメーション効果のフェーズと状態
in play状態の非規範的な説明には次の内容が含まれています:
これは、アニメーションエフェクト およびその全ての祖先がactive phaseにある場合に発生します。 アニメーションエフェクトはin playのときだけ「動作」します。
アニメーションエフェクトがactive phaseにあるがin playではない、という状況もありえます。 たとえば、アニメーションエフェクトの親グループがアニメーションエフェクトのactive intervalを切り詰め、親子で同じfill modeを適用している場合、子アニメーションエフェクトは、active phase内にスナップショットが残る状態となり、in playではなくなっても実質的に状態が保たれる場合があります。
currentについても同様です。
次のいずれかの場合に該当します:アニメーションエフェクトがin play、またはbefore phaseである、あるいはその祖先がこの条件を満たす場合(たとえば繰り返しによって再び再生される可能性を開く)。
in playの規範的な定義には次の条件が含まれています:
アニメーションエフェクトが親グループを持ち、その親グループがin playであるか、またはアニメーションエフェクトがアニメーションに直接関連付けられていてそのアニメーションがfinishedでない。
次の部分の代わりに:
currentの規範的な定義には以下の条件が追加されています:
アニメーションエフェクトが親グループを持ち、その親グループがcurrentである。
アニメーションエフェクトのphaseを決定する際に使用する用語リストに次の定義を追加します:
- at progress timeline boundary
-
次の手順で判定します:
-
次のいずれかの条件が真であれば:
-
関連付けられているアニメーションのタイムラインが進捗ベースのタイムラインでない場合、または
-
関連付けられているアニメーションのタイムラインdurationが未解決または0の場合、または
falseを返す
-
-
effective start timeを、アニメーションのstart timeが解決済みならその値、そうでなければ0とする。
-
次の一致する条件に基づきunlimited current timeを決定:
- start timeが解決済み:
-
(timeline time - start time) × playback rate - それ以外
-
animationのcurrent time
-
effective timeline timeを次で計算する:
unlimited current time / アニメーションの 再生速度(playback rate) + effective start time -
effective timeline progressを次で計算する:
effective timeline time / タイムラインduration -
effective timeline progressが0または1の場合はtrue、それ以外はfalseを返す。
-
この手順は、アニメーションが一時停止中でアニメーションのcurrent timeが明示的に設定されている場合には、タイムラインのcurrent timeとアニメーションのcurrent timeとの間にリードやラグが生じるため厳密には正しくありません。
この手順はさらに簡略化でき、再生速度や開始時刻に関係なくスクロール境界かどうかのみ判定すればよいでしょう。ここで意図するのは、アニメーションがちょうどスクロール制限で非アクティブになる予期しない挙動を防ぐことなので、ScrollTimeline の場合 fill-mode の設定が不要になります。タイムラインcurrent timeが0またはタイムラインdurationであるか判定すれば十分かもしれません。
次の部分を:
アニメーションエフェクトは、そのローカルタイムがunresolvedでなく、かつ以下のいずれかが成り立つときbefore phaseにあります:
ローカルタイムがbefore-active boundary timeより小さい、または
animation directionが"backwards"で、ローカルタイムがbefore-active boundary timeに等しい。
次で置き換え:
アニメーションエフェクトは、そのローカルタイムがunresolvedでなく、かつ以下のいずれかが成り立つときbefore phaseにあります:
ローカルタイムがbefore-active boundary timeより小さい、または
animation directionが"backwards"で、ローカルタイムがbefore-active boundary timeに等しく、さらにat progress timeline boundaryではない。
次の部分を:
アニメーションエフェクトは、そのローカルタイムがunresolvedでなく、かつ以下のいずれかが成り立つときafter phaseにあります:
ローカルタイムがactive-after boundary timeより大きい、または
animation directionが"forwards"で、ローカルタイムがactive-after boundary timeに等しい。
次で置き換え:
アニメーションエフェクトは、そのローカルタイムがunresolvedでなく、かつ以下のいずれかが成り立つときafter phaseにあります:
ローカルタイムがactive-after boundary timeより大きい、または
animation directionが"forwards"で、ローカルタイムがactive-after boundary timeに等しく、さらにat progress timeline boundaryではない。
2.5.5. フィルモード
forwards fill mode の説明は次のように更新されます:
アニメーションエフェクトがafter phaseのとき、…
→
アニメーションエフェクトがafter phase、またはアニメーションエフェクトがactive phaseだが、ある祖先がafter phaseの場合、…
backwards fill mode の説明は次のように更新されます:
アニメーションエフェクトがbefore phaseのとき、…
→
アニメーションエフェクトがbefore phase、またはアニメーションエフェクトがactive phaseだが、ある祖先がbefore phaseの場合、…
both fill mode の説明は次のように更新されます:
アニメーションエフェクト…
→
アニメーションエフェクトまたはある祖先…
(2か所)
この問題の修正には、有効時間範囲より大きい・小さいtime valueにも“補間”ではなく外挿で応答する‘overflow’ fill modeの導入が考えられます。
2.6. 繰り返し
2.6.1. 繰り返し区間
次の記述の後に:
1回分の繰り返しの長さをiteration duration(反復期間)という。
追加:
アニメーションエフェクトの初期のiteration durationは、その固有反復期間(intrinsic iteration duration)である。 固有反復期間は、以下のうち最初に一致する条件で計算する:
- アニメーションエフェクトがグループエフェクトのとき
- アニメーションエフェクトがシーケンスエフェクトのとき
- timeline duration が未解決、または iteration count が0の場合
0を返す
- それ以外の場合
(100% - start delay - end delay) / iteration countを返す注記: 現時点ではstart/end delayは0だが、将来的にパーセント指定がサポートされた際はこの計算式になる。
iteration durationは、著者によって固有反復期間以外の値も設定可能である。
2.6.2. 繰り返しの時刻空間
このセクションの最初の数段落は次の記述に置き換え:
これまで、ローカル時刻や継承時刻(§ 2.5.3 ローカル時刻と継承時刻参照)など、 様々な時刻空間を説明してきた。繰り返しによってさらにもう一つの時刻空間―iteration time space(繰り返しの時刻空間)―が導入される。
2.6.3. 区間タイミング
記述は以下のように更新:
下記の例において、繰り返しエフェクトではローカル時刻1秒でiteration timeが0となる。 シーケンスのエフェクトでは、継承時刻1秒のとき、Bエフェクトのみ再生中となり、区間間に重なりは無い。
図も以下のように更新:
2.7. アニメーションエフェクトの速度制御
(このセクションは追加されました。)
アニメーションと同様に、アニメーションエフェクトにも playback rate(再生レート) パラメータがある。 再生レートは アニメーションエフェクトの変換後時刻(transformed time)をローカル時刻から算出するときに乗算する有限な実数である。
再生レート をアニメーションエフェクトに設定したときの効果は、 アニメーション自体の再生レートとは異なる。 詳細な挙動は§ 2.8 コアアニメーションエフェクト計算で定義されている。
要約すると、再生レートの アニメーションエフェクトでの挙動は以下の通り:
-
再生レートを負の値に設定すると、 アニメーションエフェクト はアクティブ区間の終端から開始する。 これは、再生レートをアニメーションに直接設定した場合とは異なる。アニメーションの再生レートをアニメーションの関連エフェクト開始前に負の値に設定しても、関連エフェクトは再生されない。
-
再生レートを アニメーションエフェクトに設定すると、その アクティブ期間の計算に影響する(§ 2.8.2 アクティブ期間の計算参照)。
-
再生レートを アニメーションエフェクトに設定した場合、そのローカル時刻がアクティブ区間内であればジャンプ/変動が起こる。 これはアクティブ期間が更新されるが ローカル時刻は変わらないためである。
さらに、他のアニメーションエフェクトが このアニメーションエフェクトのアクティブ期間に依存している場合 (例えばシーケンス内の兄弟エフェクトなど)も エフェクトの再生レート設定でジャンプが発生する。
ランタイムで速度制御したい場合はアニメーション自体の再生レートを使うべきである。
2.8. コアアニメーションエフェクト計算
2.8.1. 概要
次の記述を:
Web Animations タイミングモデルの核となるのは、ローカル時刻を iteration progress に変換する処理である。
以下で置き換え:
Web Animations タイミングモデルの核となるのは、継承時刻を iteration progress に変換する処理である。
図を更新し「アニメーションエフェクトの再生レート」を示す:
更新:
アクティブ期間が確定したら、 アニメーションエフェクトの ローカル時刻を 変換済み進行度(iteration progress)に変換する過程は下図のとおり。
以下で置き換え:
アクティブ期間が確定したら、 アニメーションエフェクトの 継承時刻を 変換済み進行度(iteration progress)に変換する過程は下図のとおり。
タイミング計算図も次のように更新:
(1) 継承時刻を ローカル時刻に変換(開始時刻を加味)。
(2) ローカル時刻をアクティブ時刻に変換(start delayを加味)。
(3) アクティブ時刻をiteration duration, iteration start, 再生レートを使って 全体進行度に変換。
(4) 全体進行度を1回分の進行度(simple iteration progress)に変換。
(5) simple iteration progressを directed progressに変換(再生方向も考慮)。
(6) 最後にタイミング関数をdirected progressに適用して 変換済み進行度となる。
次の文を:
最初のステップであるローカル時刻の計算は、Local timeに記載。
以下で置き換え:
最初のステップであるローカル時刻の計算手順は § 2.5.3 ローカル時刻と継承時刻に記載。
2.8.2. アクティブ期間の計算
次のように更新:
アクティブ期間を計算するため、まず 繰り返し期間 を以下の式で定義する:
繰り返し期間 =iteration duration × iteration countiteration duration または iteration count のいずれかが0の場合、 繰り返し期間は0となる。
この定義は、無限大×0はIEEE 754-2008では未定義となっているため必要である。
アクティブ期間 は次のステップで計算する:
2.8.3. ローカル時刻の変換
2.8.3.1. アクティブ時刻の計算
アクティブ時刻active timeの定義の条件に 親グループの参照を追加:
ただしこれは、アニメーションエフェクトが 出力すべき場合のみ定義されるため、そのfill modeと フェーズ、そして(あれば)親グループのフェーズに従い次のように分類される:
各フェーズへの追加手順:
- アニメーションエフェクトが before phase の場合
結果は以下のうち最初に該当する条件による:
…
- アニメーションエフェクトが active phase の場合
結果は以下のうち最初に該当する条件による:
- エフェクトが親グループを持ち、 その親グループがbefore phaseで、 このアニメーションエフェクトのfill modeが
noneもしくはforwardsのとき- エフェクトが親グループを持ち、 その親グループがafter phaseで、 このアニメーションエフェクトのfill modeが
noneまたはbackwardsのとき- それ以外
local time - start delayの結果を返す。- アニメーションエフェクトが after phase の場合
結果は以下のうち最初に該当する条件による:
…
- それ以外(local timeが未解決の場合)
2.8.3.2. 全体進行度の計算
overall progressの定義の "Otherwise" 分岐の initial progress の部分を次のように更新:
- それ以外の場合
overall progress を以下のうち最初に該当する条件で計算:
- 再生レートが0未満の場合
(active time - active duration) × 再生レート / iteration duration- 再生レートが0の場合
overall progressは0とする。
- その他
2.9. 時刻変換
代案として、グループエフェクトで許可するタイミング関数を linear timing functionに限定する、 または複雑さを緩和する「単純な」タイミング関数の集合のみ許可することが考えられます。
2013年8月ディスカッション section 2を参照。
2.9.1. 変換済み進行度の計算
第2ステップを、before flag計算(エフェクトの再生レート対応)の内容で置き換え:
current directionがforwardsである、 または再生レートが0以上である (ただし両方ともtrueの場合は除く)のいずれかなら going forwardsをtrue、そうでなければfalseとする。
2.9.2. 変換済み時刻の計算
(このセクションは追加されました。)
アニメーションエフェクトの 変換済み時刻 は単純に 変換済み進行度 に iteration duration を掛けたものとなる。
変換済み進行度が未解決の場合、 変換済み時刻も未解決となる。
変換済み進行度が0で、iteration duration が無限大の場合、変換済み時刻は0となる。
2.10. グループ化と同期
アニメーション効果 のタイミングプロパティを個別に設定することもできるが、 アニメーション効果の一部や全体を 共通タイミングで同期したい場合がある。これは グループエフェクト で実現される。
簡単な例を下図に示す。
(a) 個別アニメーションに5秒のdelayを設定した場合。
(b) グループ全体にdelayを指定した場合。同じ効果が得られる。
グループエフェクトが アニメーションに直接関連付けられているとき、 そのグループエフェクトに関連付けられている アニメーション効果全体をまとめてシーク・一時停止・停止できる。
グループエフェクトは、アニメーションエフェクトの一種であり、 アニメーションエフェクトの順序付きの0個以上の並びを含み、これらを子エフェクトと呼びます。
任意の時点で、アニメーション効果は最大1つの グループエフェクトの 子エフェクトになれる。 これを 親グループ と呼ぶ。 親グループは 子エフェクト自身と同じアニメーション効果であってはならない。
グループエフェクトをネストすると 階層的なツリー構造を作れる。 こうした構造の部品や特性を記述する用語は [DOM]で定義されている:
注記: アニメーション効果への これら定義の適用において、「親」は親グループ(parent group)のみを指し、 アニメーション(概念的には親時刻ソースだが)は含まないことに注意。
子エフェクトとその 親グループの 時間関係は継承時刻定義(§ 2.5.3 ローカル時刻と継承時刻参照)に含まれる。
2.10.1. グループ時刻と子時刻の関係
グループエフェクトの子のタイミングは グループ自身のタイミングに基づく。 具体的には、子の時刻は親の変換済み時刻を基準にする。 繰り返しに関しては、子は親の1イテレーション内で動作することになる。
たとえばグループエフェクト のiteration countが2の場合、 子アニメーションも2回再生される。実質的に親の繰り返し内で再生されるため。
この場合でも、子アニメーション効果の アクティブ区間は1つのみであることに注意。 しかし親タイミングの影響で アクティブ区間が2度再生されることになる。
グループの子にもiteration count を指定した場合、親子のiteration count の掛け算のように動作する。
さらに、子がグループ親の変換済み時刻を基準に 動作するので、親のアクティブ区間 の外ではアニメーションできなくなる。 これはグループの変換済み時刻が 区間外で変化しないためであり、 グループは子の再生をクリップできる。
2つ目は同様のアニメーション効果が グループエフェクト内に (親が特定のiteration duration指定)入ることで 子エフェクトのアクティブ区間が クリップされる。
親グループの変換済み時刻を基準にすることで次も当てはまる:
2.10.2. グループエフェクトの子の開始時刻
ただし、グループエフェクトの具体的なタイプによってこの定義が上書きされる場合がある。
2.10.3. グループエフェクトの固有反復期間
グループエフェクトの 固有反復期間は 最後の子エフェクトの アクティブ区間が終わる 時刻で決まる。計算は下記のように子エフェクト数で変わる。
- グループに子エフェクトが無い場合
-
固有反復期間は0。
- それ以外
この定義はグループエフェクトの具体的なタイプで上書きされる場合がある。
2.10.4. シーケンスエフェクト
グループエフェクトの具体タイプで子の同期挙動を変えることができる。 本仕様ではさらに グループエフェクトの一種 シーケンスエフェクトを定義する。 シーケンスエフェクトは 子の開始時刻を順に調整し子を1つずつ再生する。
並列グループとシーケンスの違いを下図で比較:
(a)は通常のグループエフェクト(全子が同時に動作)。
(b)はシーケンスエフェクト(子を順に実行)。
グループエフェクトは 他のグループエフェクトを子にできるので、 異なるタイプのグループを組み合わせて複雑な同期も可能。 下図参照。
グループエフェクトは シーケンスエフェクトの 直前の子終了まで待機してから自身の子が同時に再生される。 全て終了後シーケンスの次の子が再生される。
シーケンスエフェクトは グループエフェクトの 一種であり、グループ内の子エフェクトの 開始時刻を 調整して順番に再生する。
2.10.4.1. シーケンスエフェクトの子の開始時刻
シーケンスエフェクトの子エフェクトの開始時刻は、その子の直前の兄弟の終了時刻とする。子に直前の兄弟がなければ開始時刻は0である。
また、上記定義は開始時刻を正の値に制限しないので、先行する子に負のstart delayがあると、グループの開始時刻より前にアクティブ区間が終了し、一部の子は再生されない場合がある。
アクティブ区間の開始は、アニメーションエフェクトの開始時刻とstart delayの合計なので、シーケンスエフェクトの子同士のアクティブ区間は、後述の図のようにstart delayを使って前後にずらし、厳密に連続でなく重複も可能である。
負のstart delayを使うことで2つの子のアクティブ区間を重ねることもできる。start delayはグループ内で後続の子の開始時刻にも影響する点に注意。
2.10.4.2. シーケンスエフェクトの固有反復期間
シーケンスエフェクトの固有反復期間は、仮想的にグループの子の末尾に子エフェクトを1つ追加したときの開始時刻に等しい(§ 2.10.4.1 シーケンスエフェクトの子の開始時刻参照)。ただし結果が負値になる場合、固有反復期間は0とする。
したがって、シーケンスエフェクトに子エフェクトがなければ固有反復期間は0となる。
3. アニメーションモデル
3.1. アニメーションの型
3.1.1. アニメーション不可
非アニメーションプロパティを対象とする効果についての記述を以下のように更新:
アニメーション効果がアニメーション不可なプロパティを対象としている場合でも、アニメーション効果として通常の挙動(シーケンスエフェクト内で時間を占める、シーケンスエフェクトで次の効果の実行を遅らせる、アニメーションのcurrent finished promiseのfulfillを遅延する等)を示す。
3.2. キーフレームエフェクト
3.2.1. キーフレームエフェクトの値
キーフレームエフェクトで参照される単一プロパティのエフェクト値を、iteration progress・current iteration・underlying valueそれぞれについて計算する手順は、keyframe effect composite mode を適用する手順の後に以下を追加する:
-
interval endpoints内の各keyframeに対し:
-
(web-animations-1に同じ)
-
このキーフレームエフェクトの反復合成操作がaccumulateの場合、下記の手順をcurrent iteration回繰り返す:
-
property-specific keyframesで最終の keyframe のtarget property の値(Va)と、このkeyframeのtarget property値(Vb)について、accumulation procedure(プロパティに応じた加算処理)で合成し、その戻り値をkeyframeのtarget propertyの値に置き換える。
注記: ここでの引数順は重要です。対象プロパティのアニメーション型が加算・合成処理を定めない場合、デフォルトではVb(つまりkeyframeの値)が返ります。蓄積できないプロパティの場合でも、初期値として常にVb(現イテレーションの値)になるべきなので、上記の手順通りにしています。
-
-
3.3. エフェクトの合成
3.3.1. エフェクトスタック
エフェクトの並び替え手順に次を追加:
「アニメーション効果の関連アニメーション」の定義は、このレベルで導入したアニメーションに関連付けられるに基づくよう改訂が必要。グループエフェクトを正しく扱うためにも。
3.4. エフェクトの蓄積
エフェクト値同士の合成と同様に(Web Animations § 5.4.4 Effect composition参照)、反復合成操作は同一キーフレームエフェクトにおける繰り返し間の値の合成方法を決める。
本仕様が定義する反復合成操作は以下の2つ:
- replace
-
各繰り返しは前の繰り返しの結果を無視して独立して計算する。
- accumulate
-
アニメーションの各繰り返しは、前イテレーションの最終値と蓄積する。
反復合成操作の適用はエフェクト値計算(§ 3.2.1 キーフレームエフェクトの値)で組み込む。
3.5. カスタムエフェクト
(このセクションは追加されました。)
この機能全体の見直しが必要。現状の案ではカスタムエフェクトではなく各アニメーションエフェクトがonupdateコールバックを持つ形がよい、という意見。既存効果にloggingやトリガ処理などを足す場合、従来型だと親グループを用意しなければならない。
いくつかの状況では、Web Animations が提供するアニメーション効果だけでは十分でない場合があります。
例えば、ここで定義されているアニメーション効果は
特定のCSSプロパティのみを対象にすることができます。
したがって、SVG要素のcurrentScale
プロパティを、ドキュメントコンテンツに影響を与えずに
ビューポートを滑らかにズームするために変更することはできません。
このように、提供されているアニメーション効果では 必要な機能が得られない場合は、スクリプトで定義したエフェクトを使うことができます。 このようなカスタム効果は、 タイミングモデルから反復進行度や 現在の反復を受け取り、指定された時刻に対応する効果を生成する役割を担います。
スクリプトで定義した効果を使えば、アニメーション不可の属性やプロパティだけでなく、 スクリプトでアクセス可能なあらゆるもの、たとえば音声の再生やバイブレーションの生成なども アニメーションさせることができます。
例えば、カスタム効果で
canvas
要素に描画することで、CSSやSVGで作成するのが難しい
パターンを含む複雑なアニメーション効果を実現できます。
スクリプトベースのアニメーションのタイミング制御を
使う場合と比べて、この手法ではアニメーションがフレームレートに依存せず、
一時停止、逆再生、タイミング効果によるイージング、加速、他のアニメーションとの同期、
その他Web Animationsのアニメーションと同様の制御が追加のプログラミングなしに可能となります。
カスタムエフェクトは、オーサー定義のプログラミングコールバックであり、update animations and send events手順の一部としてタイミング情報を受け取る。
タイミングプロパティが更新された時にも必ずコールされるべきか要検討。
3.5.1. カスタムエフェクトのサンプリング
カスタムエフェクトは参照元アニメーション効果ごとに、update animations and send events手順(以後「アップデート」と呼ぶ)実行時に、次の条件を基にコールされる。
-
前回アップデート時に、そのアニメーション効果がこのカスタムエフェクトを参照し、
この場合は、前回の効果ターゲット要素と、未解決なiteration progressの2つをパラメータにコールバックする。
-
現時点の効果ターゲット要素 について、次いずれか最初の条件でコールバック:
- そのカスタムエフェクト参照先アニメーション効果が in effect でなく、前回はin effectだった場合
-
現時点の効果ターゲット要素と、未解決なiteration progressでコールする。
- それ以外で、そのアニメーション効果が
-
-
in effectである
-
直前はin effectでなかった、または同じin effectでもiteration progressかcurrent iterationが異なる
この場合は、参照しているアニメーション効果の現時点のiteration progress及び効果ターゲット要素をパラメータにコールバックする。
-
今後検討されうる案:
-
カスタムエフェクト幅0のトリガ用途を想定し、区切り検出時(理論上の精度で前回・今回で対象時間が挟まった場合も)必ずコールする補助条件を設ける
-
カスタムエフェクトに特別な呼び出し条件を加える代わりに、Triggerのような新エフェクト型を導入し、ゼロ幅処理専用―例えば再生方向ごとの専用トリガなど―にする方式。
3.5.2. カスタムエフェクトの実行順序
カスタムエフェクトは アニメーション効果と異なり 特定の対象プロパティに限定されないため、その 実行順判定の手順はアニメーション効果と異なる。
カスタムエフェクトは すべてのアニメーション効果が 結果をターゲットに適用し終えた後(「合成結果を適用」参照)に実行される。
より厳密な定義が必要。 スタイルはflushedされているのか?おそらくそうである。 スクリプトベースのアニメーション効果の実行中にリフローを一時停止し、実行後に一度だけリフロー可能か?
カスタムエフェクト同士の 実行順序は、アニメーション効果の [[#the-effect-stack]] で定義された順序と同じ。より前にソートされたものが後のものより先に実行される。
3.6. アニメーショントリガ
3.6.1. 概要
アニメーショントリガは、 時間駆動アニメーションにおいて 関連付けられたアニメーションの再生制御に用いられる。 アニメーション同様、アニメーショントリガは タイムライン に関連付けられ、アタッチメント範囲にアタッチされる。
3.6.2. アニメーショントリガ内部状態
アニメーショントリガ trigger は内部的に真偽値の did trigger フラグ(初期値false)と、 以下の値をとる内部状態stateを持つ:
- idle
- 関連したアニメーション効果のanimationは before phaseに留まり、current timeは0となる。
- primary
- この値に切り替えたとき、animationに対しtypeで定義されたprimary動作タイプが適用される。
- inverse
- この値に切り替えたとき、animationにtypeで定義されたinverse動作タイプが適用される。
stateおよびdid triggerの 値は、後述のアニメーショントリガ状態の更新手順で更新される。
3.6.3. アニメーショントリガの振る舞い
アニメーショントリガは アニメーショントリガの振る舞いを持ち、 did trigger・stateとあわせて 関連アニメーションの再生制御に影響する。
アニメーショントリガに紐付くアニメーション効果は idle状態のとき、 常にbefore phaseかつ current timeは0に留まり、 triggerのdid trigger・stateの影響を受けない。 それ以外の時、behavior値ごとの再生制御は以下の通り:
- once
-
- stateがprimaryのとき
-
関連アニメーションをtriggerする。
- それ以外
-
トリガは何もしない。
- repeat
-
- stateがprimaryのとき
-
関連アニメーションをtriggerする。
- stateがinverseのとき
-
関連アニメーション効果を before phase、 関連アニメーションの start time を0へリセット。
- alternate
-
- stateがprimaryかつ did triggerがfalseのとき
-
関連アニメーションをtriggerする。
- stateがprimaryかつ did triggerがtrueのとき
-
関連アニメーションをreverse(逆再生)する。
- stateがinverseのとき
-
関連アニメーションをreverse(逆再生)する。
- state
-
- stateがprimaryのとき
-
関連アニメーションをtrigger/resumeする。
- stateがinverseのとき
-
関連アニメーションをpauseする。
primary/inverse各「動作タイプ」のきちんとした定義が必要?
3.6.4. アニメーショントリガのアクティブ区間
各アニメーショントリガは アクティブ区間 を定義し、かつ1つだけ持つ。この区間はトリガのstateがprimary時の タイムライン進行区間である。
3.6.5. アニメーショントリガの範囲
アニメーショントリガは 2つの範囲、すなわち default range と exit range を持つ。 exit range はdefault rangeを置き換え、 アクティブ区間を拡張するために使われる。
exit rangeの端点はdefault rangeの端点以上に限るべきか?
直近のstate値stateによって、 アクティブ区間は次の条件で定まる:
- stateがprimaryの場合
-
interval はexit rangeとなる。
- それ以外
-
interval はdefault rangeとなる。
3.6.6. アニメーショントリガの設定
-
old trigger を animation の現在のアニメーショントリガ(もしあれば)とする。
-
もしnew triggerがold triggerと同一であれば、この手順を中止。
-
animationのトリガをnew triggerにする。
-
new triggerに対しアニメーショントリガ状態の更新手順を実行。
3.6.7. アニメーショントリガのタイムライン設定
-
old timeline を trigger の現在の
timeline(もしあれば)とする。 -
もしnew timelineがold timelineと同一なら、この手順を中止。
-
trigger.
timelineを new timeline に設定。 -
triggerに対しアニメーショントリガ状態の更新手順を実行。
3.6.8. アニメーショントリガ状態の更新
-
did trigger を trigger のdid triggerフラグ(現在値)とする。
-
behavior を trigger に関連付けられたアニメーショントリガの振る舞いとする。
-
trigger.stateを以下で設定:
- triggerのlocal timeが未解決の場合
-
この手順を中止。
- それ以外
timelineが再びidleになったら"did trigger"フラグをfalseに戻すのが正しい/期待される挙動か?
4. プログラミングインターフェース
4.1.
AnimationTimeline インターフェース
[Exposed =Window ]partial interface AnimationTimeline {readonly attribute CSSNumberish ?currentTime ;readonly attribute CSSNumberish ?duration ;Animation play (optional AnimationEffect ?effect =null ); };
currentTime 属性の型を更新します。
currentTime, 型 CSSNumberish、readonly、nullable-
このタイムラインの現在の時刻を返します。このタイムラインが
nullの場合は 非アクティブです。値は進捗ベースのタイムラインであれば割合、その他の場合はミリ秒の倍精度値として表現されます。 duration, 型 CSSNumberish、readonly、nullable-
このタイムラインのdurationを返します。
Animation play(optional AnimationEffect? effect = null)-
このタイムラインに紐づけられた新しい
Animationオブジェクトを作成し、それが ready になり次第再生を開始します。effect が指定された場合、そのエフェクトがアニメーションの 関連付けられたエフェクトとして使用されます。
このメソッドのリネームや削除が提案されています (TAGフィードバック参照)。
effect が null の場合の開始動作について定義が必要です。
新しい
Animationオブジェクトは、Animation()コンストラクタを使って、 このAnimationTimelineオブジェクトを timeline パラメータとして、 effect を effect パラメータとして渡して作成されます。新しく作成された
Animationオブジェクトに対しては、auto-rewind フラグを true にしてアニメーションを再生する手順が実行されます。effect-
新しく作成された
Animationオブジェクトに割り当てる関連付けられたエフェクト。
4.2. Animation インターフェース
Animation インターフェースの startTime および currentTime を更新し、さらに rangeStart、rangeEnd、overallProgress を以下のように追加します:
[Exposed =Window ]partial interface Animation {attribute CSSNumberish ?startTime ;attribute CSSNumberish ?currentTime ;attribute AnimationTrigger ?trigger ;attribute (TimelineRangeOffset or CSSNumericValue or CSSKeywordValue or DOMString )rangeStart ;attribute (TimelineRangeOffset or CSSNumericValue or CSSKeywordValue or DOMString )rangeEnd ;readonly attribute double ?overallProgress ; };
属性の説明を以下のように追加または更新します:
startTime, 型 CSSNumberish、nullable-
説明を以下のように更新:
このアニメーションの開始時刻。進捗ベースのタイムラインに関連付けられている場合は、開始時刻はパーセント単位の
CSSNumericValueとして返さなければなりません。それ以外の場合は、 開始時刻はミリ秒単位の倍精度値として返されます。 この属性に値を設定すると、開始時刻を設定 する手順により新たな値が適用されます。
currentTime, 型 CSSNumberish、nullable-
説明を更新:
このアニメーションの現在時刻です。進捗ベースのタイムラインに関連付けられている場合、現在時刻はパーセント単位の
CSSNumericValueとして返さなければなりません。 それ以外の場合、現在時刻はミリ秒単位の実数値(double値)として返さなければなりません。 この属性を設定する際は、このオブジェクトの現在時刻を新しい値に設定する手順に従います。
以下を追加:
rangeStart, 型(TimelineRangeOffset or CSSNumericValue or CSSKeywordValue or DOMString)アニメーションのアニメーションアタッチメント範囲の開始を指定します。 この属性の設定は KeyframeAnimationOption rangeStartと同じルールに従います。 この属性値の取得時は、
TimelineRangeOffsetまたはDOMString"normal" のいずれかが返されます。rangeEnd, 型(TimelineRangeOffset or CSSNumericValue or CSSKeywordValue or DOMString)アニメーションのアニメーションアタッチメント範囲の終了を指定します。 この属性の設定は KeyframeAnimationOption rangeEndと同じルールに従います。 この属性値の取得時は、
TimelineRangeOffsetまたはDOMString"normal" のいずれかが返されます。overallProgress, 型 double、readonly、nullableoverallProgressを、アニメーションのassociated effect endに対する割合で指定します。
trigger, 型 AnimationTrigger、nullableアニメーションに関連付けられたアニメーショントリガーを指定します。 この属性の設定は KeyframeAnimationOption triggerと同じ規則に従います。
4.3.
AnimationEffect インターフェース
[Exposed =Window ]partial interface AnimationEffect { // Timing hierarchyreadonly attribute GroupEffect ?parent ;readonly attribute AnimationEffect ?previousSibling ;readonly attribute AnimationEffect ?nextSibling ;undefined before (AnimationEffect ...);effects undefined after (AnimationEffect ...);effects undefined replace (AnimationEffect ...);effects undefined remove (); };
getComputedTiming()-
このオブジェクトの
duration属性の説明には、timing.durationが文字列autoの場合、この属性は 本質的な反復期間(intrinsic iteration duration)の現在の算出値を返すことを示す必要があります。その値は、ミリ秒単位または進捗ベースのタイムラインに関連付けられている場合は割合として表現される倍精度値である可能性があります。 parent, 型 GroupEffect、readonly、nullable-
この親グループを持つ アニメーションエフェクトか、 親グループがなければ
nullを返します。 previousSibling, 型 AnimationEffect、readonly、nullable-
この前の兄弟となるアニメーションエフェクトのインスタンス。
nextSibling, 型 AnimationEffect、readonly、nullable-
この次の兄弟となるアニメーションエフェクトのインスタンス。
undefined before (AnimationEffect... effects)-
effects をこのアニメーションエフェクトの直前に挿入します。
-
親グループが存在しない場合、手順を中断します。
-
effects内のいずれかのアニメーションエフェクトがこのアニメーションエフェクトの包含祖先である場合、 HierarchyRequestError例外を投げて手順を中断します。
-
Insert effects を このアニメーションエフェクトの前に挿入します。
この定義は以下の使用法を除外することに注意してください。なぜならeffect自身が自身の包含祖先であるためです:effect
. before( effect); // throws HierarchyRequestError -
undefined after(AnimationEffect... effects)-
effects をこのアニメーションエフェクトの直後に挿入します。
-
親グループが存在しない場合、手順を中断します。
-
effects内のいずれかのアニメーションエフェクトがこのアニメーションエフェクトの包含祖先である場合、 HierarchyRequestError例外を投げて手順を中断します。
-
reference childをeffectsに含まれないこのアニメーションエフェクトの次の兄弟とします。
-
Insert effects を reference child の前に挿入します。
-
undefined replace(AnimationEffect... effects)-
この
AnimationEffectを、引数の effects に置き換えます。-
親グループが存在しない場合、手順を中断します。
-
effects内のいずれかのアニメーションエフェクトが、 親グループの包含祖先である場合 HierarchyRequestError例外を投げて手順を中断します。
-
reference childをeffectsに含まれないこのアニメーションエフェクトの次の兄弟とします。
-
この アニメーションエフェクトを、その親グループから削除します。
-
Insert effects を reference child の前に挿入します。
-
undefined remove()-
このアニメーションエフェクトを 親グループまたはアニメーションから削除します。
remove()
メソッドはエフェクトを親グループまたはアニメーションから削除できます。これをレベル1に残し、単に“アニメーションから削除する”として定義するべきでしょうか?
4.4.
EffectTiming および OptionalEffectTiming
辞書
partial dictionary EffectTiming {double delay ;double endDelay ;double playbackRate = 1.0; (unrestricted double or CSSNumericValue or DOMString )duration = "auto"; };partial dictionary OptionalEffectTiming {double ; };playbackRate
注: 本仕様のこのバージョンでは、duration は CSSNumericValue として設定することはできません。しかし、getComputedTiming() で duration を解決する際に CSSNumericValue として返される場合があります。 将来バージョンの仕様では、duration を有効な時間単位またはパーセント単位の CSSNumeric 値として 設定できるようになる可能性があります。
delay, 型 double-
説明を以下のように更新:
指定開始遅延は、アニメーションエフェクトの開始時刻からアクティブ区間の始まりまでのミリ秒数を表します。 指定開始遅延 は 指定タイミングの正規化手続きに従って 開始遅延 に変換されます。
endDelay, 型 double-
説明を以下のように更新:
指定終了遅延は、 アニメーションエフェクトのアクティブ区間の終了から、 例えばシーケンスエフェクト内の 後続の アニメーションエフェクトの 開始時刻までのミリ秒数を表します。 指定終了遅延 は、終了遅延へ指定タイミングの正規化手続きで変換されます。
duration, 型(unrestricted double or CSSNumericValue or DOMString)、デフォルト値"auto"-
説明を以下のように更新:
指定反復期間とは、ゼロ以上(正の無限大を含む)の実数で、 アニメーションエフェクトの1反復を完了するまでのミリ秒数、 または文字列
autoで、 アニメーションエフェクトの反復期間が 本質的反復期間を反映することを示します。 指定反復期間は指定タイミングの正規化手続きにより、 反復期間に変換されます。
playbackRate, 型 double、デフォルト値1.0-
アニメーションエフェクトの 再生速度(playback rate)プロパティであり、 ローカル時刻に乗算され、効果が元の速度とは異なる率で再生される場合があります。
4.5. AnimationEffect のタイミングを更新する
以下を置き換え:
input に 存在する各メンバーを、以下の対応関係に従って effect のタイミングプロパティに代入:
次の内容に:
input に 存在する各メンバーを、以下の対応関係に従って effect のタイミングプロパティに代入:
以下を追加:
指定タイミングの正規化手順に従うこと。
タイミングプロパティはスタイル変更によっても更新される場合があります。タイミングに影響を与える CSS アニメーションプロパティが変更された場合は 指定タイミングの正規化手順の再実行が必要です。
4.6.
ComputedEffectTiming 辞書
partial dictionary ComputedEffectTiming {CSSNumberish startTime ;CSSNumberish endTime ;CSSNumberish activeDuration ;CSSNumberish ?localTime ; };
startTime, 型 CSSNumberish-
この開始時刻は、 アニメーションエフェクトが 進捗ベースのタイムラインに関連付けられていればパーセント、 それ以外はミリ秒(double型)で表現されます。
この時刻は、親グループ(もし存在する場合)がこの子を 変換後の時空間でスケジューリングしたタイミングであり、 すなわち継承時空間でのアニメーションエフェクトの時刻です。
endTime, 型 CSSNumberish-
説明を以下のように更新:
終了時刻は アニメーションエフェクトの 継承時空間での値です。 値は、進捗ベースのタイムラインに関連付けられていればパーセント、 それ以外はミリ秒(double 型)として表されます。 これは、アニメーションエフェクトのアクティブ区間終了 + 終了遅延に対応します。
activeDuration, 型 CSSNumberish-
説明を以下のように更新:
このアクティブ期間は アニメーションエフェクトが 進捗ベースのタイムラインに関連付けられている場合パーセント、 そうでなければミリ秒(double 型)で表されます。
localTime, 型 CSSNumberish、nullable-
第2段落の説明を以下のように更新:
この値は、アニメーションエフェクトが アニメーションに関連付けられていない 、または 親グループが in effect 状態でない場合は
nullとなります。
以下を追加:
値は 進捗ベースのタイムラインに関連付けられていればパーセント、 それ以外はミリ秒の double 値で表現されます。
4.6.1.
FillMode 列挙型
enum {FillMode ,"none" ,"forwards" ,"backwards" ,"both" };"auto"
auto-
説明を以下のように更新:
GroupEffectに適用される場合は前後両方向のフィル、KeyframeEffectに適用される場合はフィルなしとなります。
4.7.
GroupEffect インターフェース
(本節は追加されました。)
グループエフェクトは
GroupEffect
インターフェースで表現されます。
[Exposed =Window ]interface {GroupEffect constructor (sequence <AnimationEffect >?children ,optional (unrestricted double or EffectTiming )timing = {});readonly attribute AnimationNodeList children ;readonly attribute AnimationEffect ?firstChild ;readonly attribute AnimationEffect ?lastChild ;GroupEffect clone ();undefined prepend (AnimationEffect ...);effects undefined append (AnimationEffect ...); };effects
GroupEffect ()-
以下の手順で新しい
GroupEffectオブジェクトを作成します:-
新しい
GroupEffectオブジェクト group を作成する。 -
timing input を、
timingに タイミング引数を処理する手順を適用した結果とする。 -
次の条件分岐で最初にマッチする場合に従い、timing input を設定する。
- もしoptionsが
EffectTimingオブジェクトなら、 -
timing input を options にする。
- そうでない場合(optionsが
doubleの場合)、 -
timing input を、 すべてのメンバーがデフォルト値で
durationだけ options に設定されたEffectTimingオブジェクトにする。
- もしoptionsが
-
group の アニメーションエフェクトのタイミングプロパティを timing input から 更新する手順を呼び出す。
この手順で例外が投げられた場合、例外を伝播して本手続きを中断する。
children-
このグループの子として追加するアニメーションエフェクトのシーケンス。
これらの子は、
append()メソッドと同じセマンティクスで順番に追加されます。GroupEffectインターフェース。 timing-
新しいグループエフェクトのタイミングプロパティまたは反復期間。
-
children, 型 AnimationNodeList、readonly-
グループの子エフェクトのリスト。
firstChild, 型 AnimationEffect、readonly、nullablelastChild, 型 AnimationEffect、readonly、nullable
- undefined prepend (AnimationEffect... effects)
-
-
もしeffectsの中のいずれかのアニメーションエフェクトがこのアニメーションエフェクトの包括祖先である場合、 HierarchyRequestError例外を投げ、この手順を中止する。
-
undefined append (AnimationEffect... effects)-
-
もしeffects中のいずれかのアニメーションエフェクトが、このアニメーションエフェクトの包括祖先である場合、 HierarchyRequestError例外を投げ、この手順を中止する。
-
effectsを
nullの前に挿入する。
-
GroupEffect clone ()-
以下の手順でこの
GroupEffectオブジェクトのディープコピーを作成します。-
sourceをこの
GroupEffectオブジェクト(複製元)とする。 -
cloned timingを
EffectTimingオブジェクトとして生成し、そのメンバーにはsource.getTiming()上の同名属性の値を設定する。 -
cloned children を空の
AnimationEffectオブジェクトのシーケンスとする。 -
source.children内の各 child について、child.clone()を呼び出した結果を cloned children に追加する。 -
GroupEffect(cloned children, cloned timing)を引数に コンストラクタGroupEffect()を呼び出して、新しいGroupEffectオブジェクトを返す。
-
4.7.1.
timing 引数の処理
GroupEffect()
や SequenceEffect()
のコンストラクタに渡されるtimingパラメータは、EffectTiming
オブジェクト、アニメーションエフェクトのミリ秒単位のdurationを示すdouble値、または undefined である場合があります。
次の「タイミング引数を処理する」
手順は、上述の入力値を正規化し、EffectTiming
オブジェクトに変換します。
- もしtimingが
EffectTimingオブジェクトなら、 -
timing を返す。
- もしtimingが
doubleなら、 -
すべてのメンバーがデフォルト値で
durationだけ timing に設定した新しいEffectTimingオブジェクトを返す。 - それ以外(timingが undefined)なら、
-
すべてのメンバーがデフォルト値の新しい
EffectTimingオブジェクトを返す。
4.7.2. 階層操作の定義
effect の「含まれない次の兄弟」 は、ある アニメーションエフェクト セット effects において、次の手順で決定されます:
-
context effect を effect とする。
-
context effect の次の兄弟が
nullでない間、以下の手順を繰り返す:-
context effect を 次の兄弟に更新。
-
もし context effect が effects に含まれていなければ、 context effect を返して手順を終了。
-
-
nullを返す。
アニメーションエフェクトを削除する には、effect をその親グループまたは アニメーションから取り除くため、下記条件で最初に該当した手順を実行します:
- もしeffectが親グループを持つなら
- もしeffectがアニメーションに直接関連付けられているなら
-
effectをアニメーションの関連付けから外す。
複数のアニメーションエフェクト effects をparentの子エフェクトリストの reference childの前に挿入するには、各effectについて次の手順を行う:
-
親からeffectを削除する。
-
effectをparentの子エフェクトリストのreference childの前に挿入する。
4.8.
AnimationNodeList インターフェース
アニメーションエフェクトのリストは
AnimationNodeList
で表現できます。
AnimationNodeList インターフェースは 0 ≤ index <
length の範囲のインデックス付きプロパティに対応しています。
このインターフェースが存在する唯一の理由は、DOMインターフェースで child nodes に
children メンバー経由でアクセスできることに慣れている作者に親しみやすい体験を提供するためです。
[Exposed =Window ]interface {AnimationNodeList readonly attribute unsigned long length ;getter AnimationEffect ?item (unsigned long ); };index
length, 型 unsigned long, readonly-
このリストに含まれるアニメーションエフェクトの数です。
getter AnimationEffect? item(unsigned long index)-
index位置のアニメーションエフェクトを返します。indexがlength以上ならnullを返します。
4.9.
SequenceEffect インターフェース
シーケンスエフェクトは
SequenceEffect
インターフェースで表されます。
[Exposed =Window ]interface :SequenceEffect GroupEffect {constructor (sequence <AnimationEffect >?,children optional (unrestricted double or EffectTiming )= {});timing SequenceEffect clone (); };
constructor (sequence<AnimationEffect>? children, optional (unrestricted double or EffectTiming) timing)-
このコンストラクタの各パラメータの意味および扱いは、
GroupEffect()コンストラクタと同一です。
SequenceEffect clone ()-
この
SequenceEffectオブジェクトのディープコピーを作成します。 ただし、GroupEffectインターフェースのclone()メソッドの手順と同じですが、新しいSequenceEffectオブジェクトを作成します。
4.10.
KeyframeEffect インターフェース
KeyframeEffect
インターフェースは以下を追加して修正されます:
partial interface KeyframeEffect {attribute IterationCompositeOperation iterationComposite ; };
KeyframeEffect (target, keyframes, options)-
KeyframeEffectオブジェクトを作成する手順のステップ5を以下のように変更:-
optionsが
KeyframeEffectOptionsオブジェクトであれば、iterationCompositeとcompositeプロパティを effectにoptionsの対応する値として代入する。これらのプロパティを代入する際は、
KeyframeEffectインターフェースの対応する setter に定義されているエラーハンドリングを適用する。 setter のいずれかが options の値について例外を投げる必要がある場合は、 同じ例外を投げ、それ以上のステップを中止すること。
-
KeyframeEffect (source)-
KeyframeEffectオブジェクトをsourceと同じプロパティで作成する手順に source から effect への iteration composite operation の設定を含める。
iterationComposite, 型 IterationCompositeOperation-
このiteration composite operationプロパティは、 キーフレームエフェクトに対して、 IterationCompositeOperation 列挙値のいずれかで指定されます。
設定時にはこのiteration composite operationプロパティが このアニメーションエフェクト に指定された値で設定されます。
4.10.1. 新しいKeyframeEffect オブジェクトの作成
次の文を置き換え:
duration が指定されていなければ、値は 0 となる。
次の内容に:
duration が指定されていなければ、 intrinsic iteration duration が使用されます。
以下を追加:
これは他のアニメーションエフェクトと組み合わせる場合に特に有用です。例えば、要素のフェードアウト後に visibility を 'hidden' にする場合、次のように記述できます:
4.10.2.
*Keyframe 辞書の型修正
ComputedKeyframe、
BaseComputedKeyframe、
BaseKeyframe、
BasePropertyIndexedKeyframe などの
offset キーの double? 型は
(CSSNumberish? or TimelineRangeOffset or DOMString) に置き換えられます。
double は引き続きパーセントとして解釈され、
DOMString
は <keyframe-selector> 構文で
TimelineRangeOffset
にパースされます。得られたTimelineRangeOffset
または CSSNumericValue
は @keyframes の定義に従って解釈されます。
DOMString
の値が有効な <keyframe-selector>
としてパースできなかった場合、そのキーフレームは無効になり、
[[web-animations-1#processing-a-keyframes-argument|処理される]]際に
TypeError を投げます
(double 値が [0,1] 範囲外の場合と同じです)。
4.10.3. KeyframeEffectOptions 辞書
KeyframeEffectOptions
辞書インターフェースに次のメンバーを追加します:
partial dictionary KeyframeEffectOptions {IterationCompositeOperation iterationComposite = "replace"; };
iterationComposite, 型 IterationCompositeOperation、デフォルトは"replace"-
iteration composite operation であり、 アニメーションの値が反復ごとにどう累積するかを定義します。
4.11. IterationCompositeOperation 列挙型
アニメーションエフェクトのiteration composite operationの可能な値は、 IterationCompositeOperation列挙型で表されます。
enum {IterationCompositeOperation ,"replace" };"accumulate"
replaceaccumulate-
accumulate iteration composite operation値に対応し、 2回目以降のアニメーションエフェクトの反復時は 前回の最終値に積み上げていきます。
4.12. EffectCallback コールバック関数
カスタムエフェクトは、
EffectCallback
コールバック関数をスクリプトで提供することで定義できます。
callback =EffectCallback undefined (double ?, (progress Element or CSSPseudoElement ),currentTarget Animation );animation
EffectCallback
は、それと紐付けられたKeyframeEffectオブジェクトが更新されるたびに呼び出されます。
- double? progress
-
iteration progress(反復進捗)値。 これが
nullの場合、そのエフェクトは削除すべきです。 - (Element or CSSPseudoElement) currentTarget
-
このコールバックが動作すべき ターゲット要素。
currentTarget は
animation.targetと異なる場合があります。animation の ターゲット要素 が更新間に変化した場合、このメソッドは一度 progress を null、かつ従来の ターゲット要素 で呼ばれ、その後新しい ターゲット要素 と現在の progress で再び呼び出されます。これによって、旧 ターゲット要素 からエフェクトを削除できます。
- Animation animation
-
更新対象となっている
Animationオブジェクトを示します。
4.13.
Animatable インターフェース
sequence<Animation> getAnimations(options)-
以下を追加:
このオブジェクトが2つ以上のターゲット要素で 同じアニメーションエフェクトを持っていた場合でも、 同じAnimation オブジェクトは返却されるリスト内で一度だけ現れます。
4.14.
Animatable インターフェース mixin
Animatable
mixinインターフェースに以下のメンバーを追加します:
Animation animate(keyframes, options)-
手順のステップ6を次のように修正します:
-
optionsが
KeyframeAnimationOptionsオブジェクトの場合は、triggerをoptionsのtriggerメンバー、存在しなければ空のAnimationTriggerOptions辞書で新たに生成したAnimationTriggerとします。 -
auto-rewindフラグをtrueにして、animationについて アニメーションのtrigger設定手順を実行します。
-
KeyframeAnimationOptions
辞書インターフェースに以下のメンバーを追加します:
dictionary {TimelineRangeOffset CSSOMString ?;rangeName CSSNumericValue ; };offset partial dictionary KeyframeAnimationOptions { (TimelineRangeOffset or CSSNumericValue or CSSKeywordValue or DOMString )rangeStart = "normal"; (TimelineRangeOffset or CSSNumericValue or CSSKeywordValue or DOMString )rangeEnd = "normal";AnimationTrigger ?trigger ; };
rangeStart, 型(TimelineRangeOffset or CSSNumericValue or CSSKeywordValue or DOMString)、デフォルトは"normal"-
指定されていて値が "normal" でない場合アニメーションのanimation attachment rangeの開始位置を指定します。
DOMStringの値はanimation-range-end値としてパースされTimelineRangeOffsetのrangeNameとoffsetになるか、もしくはCSSKeywordValueでvalueが"normal"であるものになります。CSSNumericValueは、そのoffsetを持ちrangeNameはnullのTimelineRangeOffsetとして解釈されます。 rangeEnd, 型(TimelineRangeOffset or CSSNumericValue or CSSKeywordValue or DOMString)、デフォルトは"normal"-
指定されていて値が"normal"でない場合アニメーションのanimation attachment rangeの終了位置を指定します。
DOMStringの値はanimation-range-end値としてパースされTimelineRangeOffsetのrangeNameとoffsetになるか、CSSNumericValueならTimelineRangeOffsetのoffsetと nullのrangeNameで解釈されます。 trigger, 型 AnimationTrigger、nullable-
指定があれば、アニメーションに関連づくアニメーショントリガーを setting a trigger of an animation 手順に従って設定します。
CSSKeywordValue
でvalueが
"normal"以外の場合に
rangeStartや
rangeEnd
に渡すと、どのAPIであっても
KeyframeAnimationOptions
型で受け取った場合、TypeError例外を投げます。
注: rangeName
や offset
の値は
rangeStart
や
rangeEnd
でもanimation-range-start/
animation-range-end
として解釈され、アニメーションに影響します。
詳しくは [[web-animations-1#the-animatable-interface-mixin]] をご覧ください。
4.15. AnimationPlaybackEvent インターフェース
currentTimeおよびtimelineTimeの型をdoubleからCSSNumberishにしてください。
[Exposed =Window ]interface :AnimationPlaybackEvent Event {(constructor DOMString ,type optional AnimationPlaybackEventInit = {});eventInitDict readonly attribute CSSNumberish ?currentTime ;readonly attribute CSSNumberish ?timelineTime ; };dictionary :AnimationPlaybackEventInit EventInit {CSSNumberish ?currentTime =null ;CSSNumberish ?timelineTime =null ; };
AnimationPlaybackEvent属性の型を更新します。
currentTime, 型 CSSNumberish、readonly, nullable-
イベントをキューした時刻のアニメーションの現在時刻。 イベント生成時にアニメーションがidle状態であった場合は
null。 timelineTime, 型 CSSNumberish、readonly, nullable-
イベントをキューした時点でイベントを生成したアニメーションが関連付けられていたタイムラインの時刻値。 キュー時にアニメーションがアクティブなタイムラインに関連していない場合は
null。
AnimationPlaybackEventInitメンバーの型を更新します。
currentTime, 型 CSSNumberish、nullable、デフォルト:null-
currentTime属性の説明を参照。 timelineTime, 型 CSSNumberish、nullable、デフォルト:null-
timelineTime属性の説明を参照。
4.16.
AnimationTrigger インターフェース
[Exposed =Window ]interface {AnimationTrigger constructor (optional AnimationTriggerOptions options = {});attribute AnimationTimeline timeline ;attribute AnimationTriggerBehavior behavior ;attribute any rangeStart ;attribute any rangeEnd ;attribute any exitRangeStart ;attribute any exitRangeEnd ; };
AnimationTrigger(options)-
以下の手順で新しい
AnimationTriggerオブジェクトを作成します:-
新しい
AnimationTriggerオブジェクトtriggerを作成。 -
trigger.did triggerをfalseにする。
-
KeyframeAnimationOptionのrangeStart、 rangeEnd と同じルールに従いoptions.
rangeStartおよび options.rangeEndを使って default rangeを設定。 -
同上のルールでdefault rangeに従い、 options.
exitRangeStartおよび options.exitRangeEndでexit rangeを設定。 ただし、"auto"の場合はdefault rangeのそれぞれの側になる。 -
options.
timelineをnew timelineとしてtriggerに アニメーショントリガーのタイムライン設定 手順を実行。
options-
新たに作成されるトリガの設定用パラメータ。
-
timeline, 型 AnimationTimelinebehavior, 型 AnimationTriggerBehavior-
このトリガのbehaviorを返します。
rangeStart, 型 any-
このトリガにおけるdefault rangeの開始を返します。
rangeEnd, 型 any-
このトリガにおけるdefault rangeの終了を返します。
exitRangeStart, 型 any-
このトリガにおけるexit rangeの開始を返します。
exitRangeEnd, 型 any-
このトリガにおけるexit rangeの終了を返します。
4.17. AnimationTriggerOptions
辞書
dictionary {AnimationTriggerOptions AnimationTimeline ?timeline ;AnimationTriggerBehavior ?behavior = "once"; (TimelineRangeOffset or CSSNumericValue or CSSKeywordValue or DOMString )rangeStart = "normal"; (TimelineRangeOffset or CSSNumericValue or CSSKeywordValue or DOMString )rangeEnd = "normal"; (TimelineRangeOffset or CSSNumericValue or CSSKeywordValue or DOMString )exitRangeStart = "auto"; (TimelineRangeOffset or CSSNumericValue or CSSKeywordValue or DOMString )exitRangeEnd = "auto"; };
timeline, 型 AnimationTimeline、nullable-
トリガが関連付けられるタイムライン。 未指定の場合デフォルトのドキュメントタイムラインに関連付けられます。
behavior, 型 AnimationTriggerBehavior、nullable、デフォルト"once"-
トリガの動作設定。 未指定ならトリガの動作はonceとなります。
rangeStart, 型(TimelineRangeOffset or CSSNumericValue or CSSKeywordValue or DOMString)、デフォルト"normal"-
トリガのdefault rangeの開始点です。 未指定ならdefault rangeの開始は"normal"です。
rangeEnd, 型(TimelineRangeOffset or CSSNumericValue or CSSKeywordValue or DOMString)、デフォルト"normal"-
トリガのdefault rangeの終了点です。 未指定ならdefault rangeの終了は"normal"です。
exitRangeStart, 型(TimelineRangeOffset or CSSNumericValue or CSSKeywordValue or DOMString)、デフォルト"auto"-
トリガのexit rangeの開始点です。 未指定ならexit rangeの開始は"auto"です。
exitRangeEnd, 型(TimelineRangeOffset or CSSNumericValue or CSSKeywordValue or DOMString)、デフォルト"auto"-
トリガのexit rangeの終了点です。 未指定ならexit rangeの終了は"auto"です。
4.18. AnimationTriggerBehavior
列挙型
enum {AnimationTriggerBehavior "once" ,"repeat" ,"alternate" ,"state" };
once-
once:一度だけ実行する挙動。
repeat-
repeat:繰り返し実行する挙動。
alternate-
alternate:交互に切り替わる挙動。
state-
state:状態による挙動。
4.19. モデルのライブ性
「Web Animationsモデルへの変更は即座に効果を持つ」セクションに関して、次を追加:
同じ概念は、
GroupEffectの 子要素の追加や削除のような、Web Animationsモデルのより複雑な変更にも適用されます。
追加:
- プログラミングインターフェイスを使用してモデルに加えられた変更は、 決して
EffectCallback関数が 呼び出される原因にはなりません。例えば、以下のコードでは、スクリプトブロックが通常の更新中に完了した後でコールバック関数が呼び出されます。
var timesCalled= 0 ; elem. animate( function () { timesCalled++ ; }, 10000 ); alert( timesCalled); // ‘0’が表示される 注意: この仕様はどこかで正式に定義する必要があります。
5. 変更点
5.1. レベル1以降の変更点
本仕様では、前のレベルの仕様と比べて次の変更を導入しています:
-
group effects および sequence effects の追加,
-
animation effect に固有の 再生速度 (playback rate) を導入,
-
非単調(スクロール)タイムラインのサポート。
5.2. 2023年2月21日の最初の公開作業草案以降の変更点
- animation-trigger-type を animation-trigger-behavior に名称変更
- start time の記述を current time に修正
- AnimationTrigger インターフェイスの rangeStart, rangeEnd, exitRangeStart, exitRangeEnd 属性の構文を修正 (Issue 11624)
- animation-trigger プロパティを仕様化し、AnimationTrigger インターフェイスを追加
- progress を overallProgress に変更 (Issue 8799)
- Animation progress API を仕様化 (Issue 9937)
- アニメーションの開始時刻が明示的に設定されていない場合、アニメーション範囲の境界に自動で揃えられることを明確化 (Issue 9181)
- KeyframeAnimationOptions の IDL 定義を修正
- キーフレームの offset 構文を拡張 (Issue 7637)
- Animatable インターフェイスに rangeStart/rangeEnd を追加 (Issue 7589)
- effect stack の定義を整理 (Issue 8497)
6. プライバシーに関する考慮事項
このモジュールに関して、プライバシーに関する報告はありません。
7. セキュリティに関する考慮事項
このモジュールに関して、セキュリティに関する報告はありません。