アニメーションイベントを使いこなす
アニメーションには各種イベントが用意されており、コールバック関数を登録することで、アニメーション中のさまざまなステージに任意の処理を追加できます。用意されているイベントは以下のようになります。
| イベント名 | 説明 |
| beforeBegin | アニメーション開始直前に呼ばれる。イベント引数としてアニメーション対象のdomNodeへの参照を受け取る |
| onBegin | アニメーション開始直後に呼ばれる。イベント引数として、アニメーション中に変化させている変数の現在値を受け取る |
| onEnd | アニメーション終了直後に呼ばれる。引数としてアニメーション対象のdomNodeへの参照を受け取る |
| onAnimate | アニメーションの各ステップで呼び出される。イベント引数として、アニメーション中に変化させている変数の現在値を受け取る |
| onPlay | playメソッド呼び出し時に呼ばれる。イベント引数として、アニメーション中に変化させている変数の現在値を受け取る |
| onPause | pauseメソッド呼び出し時に呼ばれる。イベント引数として、アニメーション中に変化させている変数の現在値を受け取る |
| onStop | stopメソッド呼び出し時に呼ばれる。イベント引数として、アニメーション中に変化させている変数の現在値を受け取る |
イベントへのコールバック関数の登録には2つ方法があり、Animationオブジェクト生成時の引数として渡す方法か、生成されたAnimationオブジェクトにdojo.connectでコネクトする方法です。以下に、それぞれの方法でコールバック関数を登録する例を示します。
//単一のアニメーションのインスタンス化時にコールバックを登録
var animation = dojo.fx.wipeIn({
node: "targetId",
beforeBegin: function(node) {
//アニメーション開始前の処理を記述
},
onEnd: function(node) {
//アニメーション終了後の処理を記述
}
});
animation.play();
//chainやcombineしたアニメーションにdojo.connectでコールバックを登録
var animation = dojo.fx.chain([
dojo.fx.wipeIn({
node: "targetId1"
}),
dojo.fx.wipeIn({
node: "targetId2"
})
]);
dojo.connect(animation, "onEnd", function() {
//連続実行した全てアニメーション終了後の処理を記述
});
animation.play();
dojo.animatePropertyを使いこなす
これまでは、dojoにデフォルトで用意されたアニメーションを単一、もしくは組み合わせて利用してきました。dojo.animatePropertyは、ユーザーが自分で新しいアニメーションを定義するために用意された関数です。具体的には、数値をもつ任意のCSSスタイルを、徐々に変化させることができます。まずは簡単な例をお見せします。
var animation = dojo.animateProperty({
node:"targetId",
properties: {
width: 300, //(1)
height: { end: 400, start:100 }, //(2)
fontSize: { end:14, units:"pt" } //(3)
}
});
animation.play()
dojo.animatePropertyはアニメーションオブジェクトを生成し、また引数も、基本的にはdojo.fadeInなど他のアニメーション生成関数と同様です。異なる点は、propertiesというパラメーター追加されていることです。このpropertiesに変化させたいCSSスタイル名、その開始値(optional)、終了値(required)、単位(optional)を指定します。
例の(1)では対象のオブジェクトの現在のwidthから、300pxまで変化させるアニメーションを定義しています。単位であるpxは、デフォルトの単位なので省略できます。
(2)では、heightを400pxから100pxに変化させています。
(3)では、フォントサイズを、現在の値から14ptまで変化させてます。フォントサイズの単位はpxではなくptのため、unitsとして明示的に単位を指定しています。
これら3つのCSSは、dojo.fx.combineのように同時に変化します。また、各propertiesの値を関数として定義することもできます。次の例では、現在のwidthからその2倍のwidthへと変化させるアニメーションを定義しています。
var animation = dojo.animateProperty({
node:"targetId",
properties: {
width: function(node) {
return {end: dojo.marginBox(node).w * 2}
}
}
});
animation.play()
