On Github geckotang / presentation-webanimations
※間違ったこと話してたら@GeckoTangに教えてください
こんな感じ。
var block = document.querySelector('.block'); block.animate([ { left: "0" }, { left: "100px" } ], 1500);
<div class="block"></div>
.block { position: relative; width: 100px; height: 100px; background: tomato; }
jQueryライクで、非常に簡単である。
animateメソッドの引数について
第一引数には、@keyframes的な感じの配列を指定する。デモ
element.animate([ { top: "0", left: "0" }, { top: "50px", left: "50px" }, { top: "0", left: "100px" } ], option);
また、@keyframesでいう、アニメーションの中で指定したキーフレームが発生する時間(from,to,%)はoffsetキーを使用する。デモ
element.animate([ { top: "0", left: "0" }, //自動的にoffset: 0 { top: "50px", left: "50px", offset: 1/10 }, { top: "0", left: "100px" } //自動的にoffset: 1 ], option);
第二引数に数値を指定した場合は、animation-durationの値になる。
element.animate([ {cssProperty: value}, {cssProperty: value}, {cssProperty: value} ], 1000);
より詳細に指定するためには、第二引数にオブジェクトを指定する
element.animate([ {cssProperty: value}, {cssProperty: value}, {cssProperty: value} ], { duration: 3000, delay: 1000, iterations: 3, direction: "alternate", easing: "steps(10)", fill: "none" });
オプションでは、以下を指定できる。
お気付きの通り、大体はCSS Animationのものを指定できる。詳しくは、5.4.1 Attributesを参考にしてね。
element.animate()は、AnimationPlayerオブジェクトを返す。 それを使えばアニメーションを止めたり終了を検知したりができる。
3秒後にアラートされる。
var block = document.querySelector('.block'); var player = block.animate([ { left: "0" }, { left: "100px" } ], { duration: 3000, easing: "ease-in" }); player.onfinish = function(){ alert('done!'); }
ちなみにonfinishの部分は
player.addEventListener('finish', function(){ alert('done!'); }, false);
addEventListenerでもよい
仕様上は、
これだけできるはずなのですが、2014/06/10時点のCanaryではcancelしかできない。
キャンセルボタンをクリックするとアニメーションが終了する。
<div class="block"></div> <button id="animate">アニメーションを作成する</button> <button id="cancel">player.cancel()</button>
var block, player; document.querySelector('#animate').addEventListener('click', function(){ block = document.querySelector('.block'); player = block.animate([ { left: "0" }, { left: "100px" } ], { duration: 3000, easing: "ease-in" }); }); document.querySelector('#cancel').addEventListener('click', function(){ player.cancel(); });
cancelすると、アニメーション完了後の状態になる
cancelした時にも、onfinishが呼ばれる。
var block, player; document.querySelector('#animate').addEventListener('click', function(){ block = document.querySelector('.block'); player = block.animate([ { left: "0" }, { left: "100px" } ], { duration: 3000, iterations: 1, easing: "ease-in", fill: "forwards" }); player.addEventListener('finish', function(){ alert('done!'); }, false); }); document.querySelector('#cancel').addEventListener('click', function(){ player.cancel(); });