SVGアニメーション – Web Animations API を使う – アニメーション実行中の再生倍率について
前回の投稿(https://propansystem.net/blog/9978)で、逆再生を行う方法としてplaybackRateプロパティを使用する方法をとりあげました。
ここでは、playbackRateについて再生倍率を制御する目的で試してみます。
簡単なサンプルを書いて試してみます。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
<style>
#bottomStart {
margin-bottom : 10px;
}
#test1_dom {
color : #5f5d5d;
background-color : #cccccc;
font-size : 1.1rem;
width : 150px;
}
.range {
width: 100%; /* スライダーの幅を画面最大に */
}
</style>
</head>
<body>
<!-- 開始ボタン -->
<div id="bottomStart">
<input type="button" id="start_animate" value="アニメーション開始">
<input type="button" id="cancel_animate" value="アニメーション停止">
</div>
<!-- スライダ -->
<div class="params_box">
<span class="param_title">再生倍率調整</span>
<div><input type="range" class="range" id="range1" value="0" max="1000"></div>
<span class="params" id="range1_value"></span>
</div>
<!-- アニメーション用DIV -->
<div id="test1_dom">TEST1 (<span id="display"></span>)</div>
<script>
// DOM要素取得
let start_animate_dom = document.querySelector("#start_animate" );
let cancel_animate_dom = document.querySelector("#cancel_animate");
let display_dom = document.querySelector("#display" );
let test1_dom = document.querySelector("#test1_dom" );
let range1_dom = document.querySelector("#range1" );
// アニメーション用オブジェクト
let animation1;
// keyframes定義
const keyframes1 = [
{transform: 'translateX(0px)' },
{transform: 'translateX(500px)'},
];
// option定義
const options1 = {
duration : 100000, // 100秒で一周
iterations : Infinity
};
animation1 = test1_dom.animate(keyframes1, options1);
animation1.cancel(); // 初期値は停止
// アニメーション開始
start_animate_dom.addEventListener('click', (e) => {
animation1.play();
display_dom.innerHTML = animation1.playState;
}, false);
// アニメーション停止
cancel_animate_dom.addEventListener('click', (e) => {
animation1.cancel();
display_dom.innerHTML = animation1.playState;
}, false);
// スライダの要素を取得し、再生速度調整用のイベントを付与する
range1_dom.addEventListener('input', change_range_slider);
function change_range_slider()
{
// パターン内のDOM情報を取得する
let set_param_value = range1_dom.value;
// アニメーションの再生速度(playbackRate)を変更する
animation1.playbackRate = set_param_value;
// 設定値を画面出力
document.getElementById('range1_value').innerHTML = range1_dom.value + '倍';
}
</script>
</body>
</html>
画面にアクセスして「アニメーション開始」ボタンを押下したあと、「再生倍率調整」のスライダを動かすと再生時の倍率を1~1000で変更することができます。
アニメーションは「DIVタグをx軸法j広告に100秒かけて500px移動する」というシンプルなもので、optionsで「iterations : Infinity」を指定して無限に繰り返すようになっています。
アニメーション開始ボタンを押下して、スライダを動かすと再生倍率が変わりDIVタグの移動スピードが変化することがわかります。
これはあくまでも再生倍率なので、divタグの移動スピードを早めている訳ではないことに注意が必要です。