JS系のTweenライブラリだと、オブジェクトのCSSプロパティにトゥイーンをかける事を基本に設計されている場合が多いかとおもいます。もちろんTweenかけるものって基本的に表示要素なので、CSSにトゥイーンをかけることは間違ってはいないのですが、以前の記事にてSprite3Dを使用しましたが、Sprite3Dを使ってトゥイーンをかけたい場合は、CSSプロパティではなく、メソッドを実行する必要があります。もちろんメソッドの中ではCSSプロパティを操作しているわけですが。
そういった目的に絞って、シンプルなトゥイーンエンジンが必要になり、作りましたので投稿します。
概要は、オブジェクトのプロパティの値を現在の値から、指定した値まで、指定秒で、指定イージング関数を通して変化を与えつづけます。
ソース
デモページ
基本的な使い方ですが、まずはじめに第一引数にオブジェクトを渡してTween関数を実行して、戻り値を変数に格納してください。クラスベースのオブジェクト指向言語的に考えますと、Tweenクラスをnewしてインスタンスを生成するイメージです。
var tween = knockknock.jp.Tween({a:0, b:0});
トゥイーンを実行したいタイミングで、このインスタンスのplayメソッドを第一引数に変化を与えたいプロパティと変化量を、第二引数にイージング関数と時間、各種コールバックをそれぞれオブジェクトにして渡して、実行してください。
tween.play({ a: 100 b: -100 },{ easing: knockknock.jp.Easing.sineEaseOut, duration: 1000, play: function(e){ // トゥイーン開始 }, update: function(e){ // プロパティaの値 console.log(e.target.a); // プロパティbの値 console.log(e.target.b); }, complete: function(e){ // トゥイーン終了 } });
コールバック関数updateのe.targetを参照することで、変化量を取得できますので、この値を利用して必要なトゥイーンを行ってください。例えば以下のようにupdate関数を定義すると通常jQueryのAnimateを実行したときのように、CSSに変化を与えることができます。
var box = document.getElementById("box"); var tween = knockknock.jp.Tween({left:0}); tween.play({ left: 500 },{ easing: knockknock.jp.Easing.sineEaseOut, duration: 1000, update: function(e){ box.style.left = e.target.left + "px"; } });
じつは、この記事を書きながら調べて気がついたのですが、jQueryのAnimateで全く同じことができるんですね。。。
jQuery の .animate() で普通のオブジェクトをアニメーションさせる
FlashではトゥイーンエンジンはTweenクラスに始まり、TweenerやFuseKit、TweenMAX、BetweenAS3と色々ありますが、JavaScriptでも増えてきた感はあります。GSAP JSとかよさそうですね。個人的にはBetweenAS3を非常に愛用していましたので、BetweenJSに期待したいところです。