dojo.Animationでアニメーションを作成
Dojo Toolkitには、フェードイン、フェードアウトといった、利用頻度の高いアニメーションを容易に実現するためのモジュールが用意されています。本稿では、これらを活用してちょっとした動きをアプリケーションに取り入れることで、アプリケーションをよりリッチなものにする方法をご紹介します。
dojo.Animationを使いこなす
Dojoでは1つのアニメーションの動作をdojo.Animation型のオブジェクトとして扱います。具体的にはアニメーションの動作の定義をカプセル化して、実行したり、停止したりすることを可能にします。例えばフェードイン、フェードアウトといったアニメーションはそれぞれ、dojo.fadeIn, dojo.fadeOutという関数が返すdojo.Animation型のオブジェクトのplay, stopといったメソッドを実行することで実現できます。
まずは簡単なサンプルを見てみましょう。以下のコードを実行すると、ナビゲーションメニューがフェードインされて表示されます。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html401/strict.dtd"> <html> <head> <title>Animation Test</title> <style type="text/css"> @import "../dojo-release-1.5.0/dojo/resources/dojo.css"; @import "../dojo-release-1.5.0/dijit/themes/claro/claro.css"; #menu ul { list-style: none; padding-left: 15px; } #menu li { width: 100px; padding-bottom: 2px; border-bottom: 3px solid blue; margin: 5px; } #menu li a { color: black; text-decoration: none; padding-left: 10px; } </style> <script type="text/javascript" src="../dojo-release-1.5.0/dojo/dojo.js" djConfig="parseOnLoad: true"> </script> <script type="text/javascript"> dojo.require("dojo.fx"); dojo.require("dijit.form.Button"); dojo.addOnLoad(function() { dojo.style("menu", "opacity", "0"); var animation = dojo.fadeIn({ node: "menu", duration: 1000, delay: 500 }); animation.play(); }); </script> </head> <body class="claro"> <h1>フェードインするメニュー</h1> <div id="menu""> <ul> <li><a href="javascript:;">最新のニュース</a></li> <li><a href="javascript:;">政治・経済</a></li> <li><a href="javascript:;">文化・芸能</a></li> <li><a href="javascript:;">気象情報</a></li> </ul> </div> </body> </html>
dojo.addOnLoadの中身に注目してください。まず最初に、dojo.styleを利用して、id=”menu”を持つdivのopacityを0に設定しています(透明にする)。デフォルトでメニューをフェードアウトした状態にするためです(dojo.fadeIn、dojo.fadeOutは、opacityを変化させることでフェードイン、フェードアウトを実現させています)。次に、dojo.fadeIn関数を使用して、フェードインアニメーションオブジェクトを生成し、playメソッドで実行しています。fadeIn関数の引数で、メニューを含むdivをアニメーションの対象に、delayとdurationを指定することで、画面ロード後500ms後に、1秒間かけてメニューを徐々に表示させるよう指定しています。
dojo.Animationには、他にも以下のようなメソッドが用意されています。
メソッド | 説明 |
play(/*int?*/delay, /*boolean?*/gotoStart) | アニメーションを開始する
|
pause() | アニメーションを一時停止する |
gotoPercent(/*decima*/percent, /*boolean?*/andPlay) | アニメーションの位置をパーセント指定する
|
stop(/*boolean?*/gotoEnd) | アニメーションを停止する
|
status() | 現在のアニメーションの状態を文字列として返す("paused", "playing", "stopped") |
また、以下のフィールドが定義されています。これらのフィールドを変更することで、dojo.Animation型オブジェクトの振る舞いを変更でき、またその値を参照したりすることもできます。
フィールド | 説明 |
duration | アニメーションの開始から終了までの実行時間(ms)。デフォルトでは350ms |
repeat | デフォルトは0。0以上を指定した場合、指定回数分アニメーションが繰り返し実行される。-1を指定した場合、無限ループされる |
rate | FPS(1秒あたりの画面再描画の回数)を指定。デフォルトは20(1000 / rate = FPS) |
デフォルトで用意されているアニメーションを利用するには、サンプルのように、以下の関数を呼び出し、アニメーションオブジェクトをインスタンス化して実行します。Dojoで用意されていないアニメーションに関しても、自分で定義することが可能です。その方法についても後述します。
アニメーション | 説明 |
dojo.fadeIn(/*Object*/ args) | オブジェクトが消えた状態から、徐々に表示される(透明から徐々に色が濃くなり表示) |
dojo.fadeOut(/*Object*/ args) | オブジェクトが表示された状態から、徐々に消える(色が徐々に透明になって消失) |
dojo.fx.wipeIn(/*Object*/ args) | オブジェクトが消えた状態から、上から下へとワイプしながら表示される |
dojo.fx.wipeOut(/*Object*/ args) | オブジェクトが表示された状態から、下から上へとワイプしながら消える |
dojo.fx.slideTo(/*Object*/ args) | オブジェクトを、指定された位置へと徐々に移動する(left, topという追加パラメーターが必要) |
各関数の引数には、アニメーションに必要なパラメーターを指定したオブジェクトを渡す必要があります。以下のパラメーターは全ての関数に共通です。
パラメーター名 | 説明 |
node(required) | アニメーション対象のノードを、domNodeへのリファレンス、もしくはdomNodeに指定されたIDの文字列で指定する |
delay(optional) | アニメーションを開始するまでの時間(ms)デフォルトは0 |
duration(optional) | アニメーションオブジェクトの、durationフィールドの値を指定。デフォルトは350ms |
easing(optional) | イージング関数を指定します。詳しくは豆知識で。通常はデフォルトのままで問題ないです |
rate(optional) | アニメーションオブジェクトの、rateフィールドの値を指定。デフォルトとは20 |
repeat(optional) | アニメーションオブジェクトの、repeatフィールドの値を指定。デフォルトは0 |
イージングとは、アニメーションを徐々に加速、もしくは減速させることを意味します。例えば、dojo.fx.slideToは、ある場所へとオブジェクトを徐々に移動するアニメーションですが、イージング関数を変更することで、その加速減速の制御を変更できます(例えば、最初は早く徐々に遅く移動するなど)。Dojoに用意されたイージング関数一覧は、DojoCampusおよび、”dojo\dojox\fx\tests\test_easing.html”にあるeasing関数のテストファイルを参照してください。