SVGアニメーション – Web Animations API を使う – Element.animate()メソッドの options – iterationStart

javascript

SVGアニメーション – Web Animations API を使う – Element.animate()メソッドの options – iterationStart

Element.animate()メソッド の options の iterationStart について試してみます。

iterationStart は、アニメーションの開始秒数を指定します。

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

<style>
.params_box {
    font-size : 0.8em;
}
.range {
    width: 400px;
}
.code_view {
    font-size : 0.8em;
    padding   : 5px;
    margin    : 20px 0;
    color     : #ffffff;
    background-color: #000000;
}
.code_view_str {
    color: #ff0000;
}
.status_view {
    margin-bottom: 20px;
}

#start_animation {
	margin: 0px 0px 30px 0px;
}
#status_message1 {
	color      : #ff0000;
	font-weight: bold;
}
</style>

</head>
<body>

<div class="status_view">
    <div>ステータス1:<span id="status_message1"></span></div>
</div>

<div>
	<input type="button" id="start_animation" value="アニメーション開始">
</div>

<div>
    <div class="params_box">
        <span>iterationStart  : </span><span class="params" id="range1_value"></span>
        <div><input type="range" class="range" id="range1" value="0" max="1" step="0.1"></div>

    </div>
</div>

<div class="code_view">
const options = {<br />
&nbsp;&nbsp;&nbsp;&nbsp; duration       : <span class="code_view_str">5000</span><br />
&nbsp;&nbsp;&nbsp;&nbsp; iterationStart : <span class="code_view_str" id="code_view1"></span><br />
&nbsp;&nbsp;&nbsp;&nbsp; iterations     : <span class="code_view_str">Infinity</span><br />
};
</div>

<svg xmlns="http://www.w3.org/2000/svg"
    width   = "500"
    height  = "100"
    viewBox = "0 0 500 100"
>
    <rect
        id     = "recttest"
        x      = "0"
        y      = "0"
        width  = "100"
        height = "50"
    />
</svg>

<script>

// アニメーション対象のDOM要素を取得
let dom_rect = document.querySelector("#recttest");

// ステータス表記
let status_message1 = document.querySelector('#status_message1');

let animation1;

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

// スライダの要素を取得し、イベントを付与する
let dom_range1 = document.querySelector('#range1');

// 各スライダーごとのイベントに、共通の関数を割り当てて処理する
dom_range1.addEventListener('input', change_range_slider);


// スライダーを動かした時の処理
function change_range_slider()
{
    if (animation1) {
        animation1.pause(); // アニメーション1を一時停止
    }

    status_message1.innerHTML = '';

    // アニメーションのオプションを取得
    const currentOptions = {
        duration       : 5000,
        iterationStart : dom_range1.value,
        iterations     : Infinity
    };

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

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

    status_message1.innerHTML = 'アニメーション1 再生';

    // パラメータ値をHTML出力
    let range1_value_dom = document.querySelector('#range1_value');
    range1_value_dom.innerHTML = dom_range1.value;

    let code_view1_dom = document.querySelector('#code_view1');
    code_view1_dom.innerHTML = dom_range1.value;
}

// ボタン要素のDOMを取得
let dom_start_animation = document.getElementById('start_animation');

// イベントを付与
dom_start_animation.addEventListener('click',  StartAnimation, false);


// ボタン押下時の処理
function StartAnimation()
{
	console.log("ボタン押下時の処理 ");

    status_message1.innerHTML = '';

    // パラメータ値をHTML出力
    let range1_value_dom = document.querySelector('#range1_value');
    range1_value_dom.innerHTML = dom_range1.value;

    // アニメーションのオプションを取得
    const currentOptions = {
        duration       : 5000,
        iterationStart : dom_range1.value,
        iterations     : Infinity
    };

	// アニメーション1 生成
	animation1 = dom_rect.animate(keyframes1, currentOptions);

	// アニメーション1 再生
	animation1.play();
	status_message1.innerHTML = 'アニメーション1 再生';

    let code_view1_dom = document.querySelector('#code_view1');
    code_view1_dom.innerHTML = dom_range1.value;

}

</script>

</body>
</html>

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

スライダーの iterationStart の値を指定し、アニメーション開始ボタンを押下すると、スライダの値(0.0~1.0)に応じた値で、アニメーションの開始タイミングが決定されます。

コメントを残す

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