DOM

Animation.replaceState プロパティ

 編集:2022.10.23 by T.A.

[Edge]。→

Web アニメーション Animation の置換状態を文字列で返します。

mdn: これは、アニメーションが削除された場合にアクティブになります。または Animation.persist() が呼び出された場合は永続化されます。

構文
Animation.replaceState
Animation Animation

アニメーションの置換状態を表す文字列。値は次のいずれかです:

active アニメーションの置換状態の初期値。アニメーションがブラウザーの自動的に塗りつぶしアニメーションを削除する動作によって削除された場合。
persisted アニメーションは、Animation.persist() を呼び出して明示的に永続化されています。
removed アニメーションは明示的に削除されました。
new Animation() と違う設定、replaceState 監視

HTML:

<DIV id=IdTest style="width:1em">■</DIV>
<BUTTON id=IdPlay>再生</BUTTON><BR>
<BUTTON id=IdSet1>違うアニメーション設定1、play()</BUTTON>
<BUTTON id=IdSet2>違うアニメーション設定2、play()</BUTTON>
<BR>
<SPAN id=IdLog></SPAN>

JavaScript:

KE=new KeyframeEffect(  //アニメーション データの作成:
  IdTest, [  //ターゲット。
    {transform:'translateX(150px)'}  //X軸移動。
  ]
  , {duration:1000, fill:'forwards'}  //10秒掛けて、?。
);
function JobDel(){  //remove イベントの処理:
  D=Ani;  //=[object]:[object Animation]。メイン動作をしてから、新しい動作をさせて動作が終わった所。
詳細 //effect=[object]:[object KeyframeEffect] //startTime=[number]:8259.59 //currentTime=[number]:1000 //playbackRate=[number]:1 //playState=[string]:finished //pending=[boolean]:false //id=[string]: //onfinish=[object]:null //oncancel=[object]:null //cancel=[function]:function cancel() { [native code] } //finish=[function]:function finish() { [native code] } //pause=[function]:function pause() { [native code] } //play=[function]:function play() { [native code] } //reverse=[function]:function reverse() { [native code] } //updatePlaybackRate=[function]:function updatePlaybackRate() { [native code] } //timeline=[object]:[object DocumentTimeline] //replaceState=[string]:active //…
} Ani=new Animation(KE, document.timeline); //アニメーション作成。 //Ani.persist(); Ani.onremove=JobDel; //アニメーションが削除されたら…イベント割り当て。 function JobPlay(){ //再生の処理: Ani.play(); } function JobSet1(){ //新しいアニメーション1の処理: KE=new KeyframeEffect( //アニメーション データの作成: IdTest, [ //ターゲット。 {transform:'translateX(200px)'} //X軸移動。 ] , {duration:1000, fill:'forwards'} //掛かる時間、?。 ); Ani=new Animation(KE, document.timeline); //アニメーション作成。 Ani.onremove=JobDel; //アニメーションが削除されたら…イベント割り当て。 Ani.play(); //再生。 } function JobSet2(){ KE=new KeyframeEffect( //アニメーション データの作成: IdTest, [ //ターゲット。 {transform:'translateX(100px)'} //X軸移動。 ] , {duration:1000, fill:'forwards'} //掛かる時間、?。 ); Ani=new Animation(KE, document.timeline); //アニメーション作成。 Ani.onremove=JobDel; //アニメーションが削除されたら…イベント割り当て。 Ani.play(); //再生。 } IdPlay.onclick=JobPlay; //再生ボタンのイベント割り当て。 IdSet1.onclick=JobSet1; //新しいアニメーション1ボタンのイベント割り当て。 IdSet2.onclick=JobSet2; //新しいアニメーション2ボタンのイベント割り当て。 function Job(){ //タイマー監視処理: IdLog.innerHTML="replaceState:"+Ani.replaceState; //表示。 } setInterval(Job, 300); //タイマー監視。

remove イベントが発生するタイミング: 次の設定のアニメーション動作が終わった時に発生する。しかも remove イベントなのに replaceState が「active」になっている。

KeyframeEffect()

remove イベントreplaceState

CSS:transformCSS:translate

animate() と違う設定、replaceState 監視

HTML:

<DIV id=IdTest style="width:1em">■</DIV>
<BUTTON id=IdSet1>違うアニメーション設定1</BUTTON>
<BUTTON id=IdSet2>違うアニメーション設定2</BUTTON>
<BR>
<SPAN id=IdLog></SPAN>

JavaScript:

function JobDel(){  //remove イベントの処理:
  IdLog.innerHTML="replaceState:"+Ani.replaceState;  //表示
  alert("replaceState:"+Ani.replaceState);           //表示
}
Ani=IdTest.animate({transform:'translateX(150px)'}, {duration:1000, fill:'forwards'});
Ani.onremove=JobDel;  //イベント割り当て。

function JobSet1(){
  Ani=IdTest.animate({transform:'translateX(100px)'}, {duration:1000, fill:'forwards'});
  Ani.onremove=JobDel;
}
function JobSet2(){
  Ani=IdTest.animate({transform:'translateX(200px)'}, {duration:1000, fill:'forwards'});
  Ani.onremove=JobDel;
}
IdSet1.onclick=JobSet1;
IdSet2.onclick=JobSet2;

function Job(){
  IdLog.innerHTML="replaceState:"+Ani.replaceState;
}
setInterval(Job, 300);

animate()

remove イベントreplaceState

CSS:transformCSS:translate


テスト