SVGアニメーション – Web Animations API を使う – アニメーション実行中のplayStateの値について

javascript

SVGアニメーション – Web Animations API を使う – アニメーション実行中のplayStateの値について

アニメーション実行中にanimationしているオブジェクトのplayStateプロパティを参照することで、実行状態が見えます。
playStateは以下のものがあります。

開始
一時停止
逆再生
終了
停止

実際にサンプルを用意して確かめてみると、逆再生の時の値は「running」と表示され、通常の開始と同じ値になります。(ただしDIVのアニメーションの動きは逆です)

以下に簡単なサンプルを用意しました。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
<style>
#bottomStart {
    margin-bottom    : 10px;
}
#test1_dom {
    color            : #5f5d5d;
    background-color : #eeeeee;
    font-size        : 1.1rem;
    width            : 150px;
}
</style>
</head>
<body>
<!-- 開始ボタン -->
<div id="bottomStart">
    <input type="button" id="start_animate"   value="アニメーション開始"    >
    <input type="button" id="pause_animate"   value="アニメーション一時停止">
    <input type="button" id="reverse_animate" value="アニメーション逆再生"  >
    <input type="button" id="finish_animate"  value="アニメーション終了"    >
    <input type="button" id="cancel_animate"  value="アニメーション停止"    >
</div>
<!-- アニメーション用DIV -->
<div id="test1_dom">TEST1 (<span id="display"></span>)</div>
<!-- 状態表示 -->

<script>
// DOM要素取得
let start_animate_dom   = document.querySelector("#start_animate"  );
let pause_animate_dom   = document.querySelector("#pause_animate"  );
let reverse_animate_dom = document.querySelector("#reverse_animate");
let finish_animate_dom  = document.querySelector("#finish_animate" );
let cancel_animate_dom  = document.querySelector("#cancel_animate" );
let display_dom         = document.querySelector("#display"        );
let test1_dom           = document.querySelector("#test1_dom"      );
// アニメーション用オブジェクト
let animation1;
// keyframes定義
const keyframes1 = [
    {transform: 'translateX(0px)'  },
    {transform: 'translateX(200px)'},
];
// option定義
const options1 = {
    duration   : 10000
};
animation1 = test1_dom.animate(keyframes1, options1);
animation1.cancel(); // 初期値は停止

// アニメーション開始
start_animate_dom.addEventListener('click', (e) => {
	//animation1 = test1_dom.animate(keyframes1, options1);
	animation1.play();
	display_dom.innerHTML = animation1.playState;;
}, false);
// アニメーション一時停止
pause_animate_dom.addEventListener('click', (e) => {
	//animation1 = test1_dom.animate(keyframes1, options1);
	animation1.pause();
	display_dom.innerHTML = animation1.playState;;
}, false);
// アニメーション逆再生
reverse_animate_dom.addEventListener('click', (e) => {
	//animation1 = test1_dom.animate(keyframes1, options1);
	animation1.reverse();
	display_dom.innerHTML = animation1.playState;;
}, false);
// アニメーション終了
finish_animate_dom.addEventListener('click', (e) => {
	//animation1 = test1_dom.animate(keyframes1, options1);
	animation1.finish();
	display_dom.innerHTML = animation1.playState;;
}, false);
// アニメーション停止
cancel_animate_dom.addEventListener('click', (e) => {
	//animation1 = test1_dom.animate(keyframes1, options1);
	animation1.cancel();
	display_dom.innerHTML = animation1.playState;;
}, false);

</script>
</body>
</html>

サーバ上のHTMLはこちら(test1.html)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です