SVGアニメーション – Web Animations API を使う – Element.animate()メソッドの options – easing について
前回の投稿に続き、Element.animate()メソッド の options の easing について試してみます。
options – easing について
options の easing は アニメーションの速度変化を指定します。
cssにも同じ easing という名称のcssアニメーション制御用のプロパティが存在するので注意が必要です。
本投稿では javascript の easing を取り扱います。
指定する名称は下記のものがあります。
linear 一定の速度で変化(デフォルト) ease 急速に加速してゆっくり終わる ease-in 最初はゆっくり、最後に加速して終わる ease-out 最初は速く、最後はゆっくり終わる ease-in-out ゆっくり入り、加速し、ゆっくり終わる steps(count, start|end) ステップごとに等分に区切って変化させる cubic-bezier(x1,y1,x2,y2) 3次ベジェ曲線による変化
easingプロパティを書く場所
easingプロパティを書く場所は、options に記載します。
また、keyframes ごとに記載することもできます。
keyframesにeasingの定義を書いた例です。
// keyframesの定義 const keyframes = [ {left:'0px' , fill:'#999999', easing: 'ease' }, // グレー {left:'300px', fill:'#3399FF', easing: 'ease-in-out'}, // ブルー {left:'450px', fill:'#FF9900', easing: 'ease-out' }, // オレンジ ];
上記の例をoptionsに書いた例です。
// アニメーション処理のタイミングプロパティを定義 const options = { duration: 5000, iterations: Infinity, easing: ['ease', 'ease-in-out', 'ease-out'] };
easingプロパティ – linear について
linear は一定の速度で変化します。
easing が無指定の場合は、デフォルト値として linear が指定されます。
以下 easingプロパティ – linear のサンプルです。
アニメーションの定義はkeyframesに記載し、3つの状態(サンプルの場合、SVG要素の「x座標」と「色要素」)を変化させています。
また、easing には明示的に’linear’を指定して、一定の速度で変化するようにしています。
// keyframesの定義 const keyframes = [ {x:'0px' , fill:'#999999', easing: 'linear'}, // グレー {x:'300px', fill:'#3399FF', easing: 'linear'}, // ブルー {x:'450px', fill:'#FF9900', easing: 'linear'}, // オレンジ ];
以下、サンプル全体です。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>テストHTML</title> </head> <body> <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 = "70" fill = "#999" /> </svg> <script> // アニメーション対象のDOM要素を取得 let dom_recttest = document.querySelector("#recttest"); // keyframesの定義 const keyframes = [ {x:'0px' , fill:'#999999', easing: 'linear'}, // グレー {x:'100px', fill:'#3399FF', easing: 'linear'}, // ブルー {x:'400px', fill:'#FF9900', easing: 'linear'}, // オレンジ ]; // アニメーション処理のタイミングプロパティを定義 const options = { duration: 5000, direction: 'alternate', iterations: Infinity }; dom_recttest.animate(keyframes, options); </script> </body> </html>
画面にアクセスすると、rectのSVG要素が x座標の 0 → 100 → 400 へと変化し、
同時に色がグレー → ブルー → オレンジ へと一定の速度で変化していることがわかります。
次回以降、easingプロパティの別な設定について確かめてみます。