SVGアニメーション – Web Animations API を使う – Element.animate()メソッドの options – 同一DOM要素に多重にanimate()を適用した場合

javascript

SVGアニメーション – Web Animations API を使う – Element.animate()メソッドの options – 同一DOM要素に多重にanimate()を適用した場合

同一DOM要素に多重にanimate()を適用した場合、原則「後着優先」で処理されます。

例えば、アニメーション要素が2つあり、

①アニメーション1が10秒かけて色変化する
②アニメーション2が2秒後から5秒かけて色変化する

という場合、

アニメーション開始と同時に①のアニメーションが開始→終了されます。

ただ、この①の処理中に②が同一DOM要素に対してアニメーションされた場合、①のアニメーション要素は打ち消され、②のアニメーションが優先されます。

また、②のアニメーションが短時間で終わる場合は、②のアニメーション終了後に①のアニメーションが引続き継続されます。

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

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>テストHTML</title>

<style>
.pseudoElementTest {
    color: #000000;
    font-size: 1.2rem;
}
</style>

</head>
<body>

<div class="pseudoElementTest">test</div>
<input type="button" id="button_test1" value="pseudoElementTest1">

<script>
// DOM要素を取得
let pseudoElementTest = document.querySelector(".pseudoElementTest");

// アニメーション用
let animation1;

// アニメーション1 keyframesの定義
const keyframes1 = [
    {width:'100px', height:'50px', backgroundColor:'#FF6600'}, // オレンジ
    {width:'50px' , height:'50px', backgroundColor:'#FFFF00'}, // イエロー
];

// アニメーション2 keyframesの定義
const keyframes2 = [
    {width:'100px', height:'50px', backgroundColor:'#0033FF'}, // ブルー
    {width:'550px', height:'50px', backgroundColor:'#CC33FF'}, // パープル
];

// botton1
let dom_test1 = document.getElementById('button_test1');


// botton1押下
dom_test1.addEventListener('click', () => {

    if (animation1) {
        animation1.pause(); // アニメーション1を一時停止
    }

    const currentOptions1 = {
        duration      : 10000
    };

    const currentOptions2 = {
        duration      : 5000,
        delay         : 2000,
    };

    // オプションを再設定する
    animation1 = pseudoElementTest.animate(keyframes1, currentOptions1);

    // オプションを再設定する
    animation1 = pseudoElementTest.animate(keyframes2, currentOptions2);

    // アニメーション1の再生と停止
    animation1.play();
}, false);

</script>

</body>
</html>

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

画面アクセスしてボタンを押下すると、アニメーション①が開始されます。

このとき、

「オレンジ → イエロー」の背景色が10秒かけて変化しますが、

2秒後にアニメーション②が開始された際、

「ブルー → パープル」のアニメーション②が優先されて開始することがわかります。

このように options が無指定でデフォルト設定の場合「後着優先」の処理がされることがわかります。

この動きを時系列の表にすると、次のアニメーションと時間の流れになります。

コメントを残す

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