Animation

サイトのナビゲーション通りに進み、いよいよYahooアニメーション(Animation)のサンプリングに入る。

AnimationのトップページのGetting Startedをみると、以下のjsファイルを読み込めと書いてある。

<!-- Dependencies -->
<script src="scripts/yahoo-dom-event/yahoo-dom-event.js" type="text/javascript">
</script>

<!-- Source file -->
<script src="scripts/animation/animation-min.js" type="text/javascript">
</script>

ただし、HttpServerのドキュメント・ルート/scriptsに、配布モジュールのbuild下が配置されていると仮定。

Domのところでも、このページは概略の説明だったから、サンプリングは簡単に読み飛ばしていくことにする。

Animationオブジェクトの基本形は、

<div id="test"></div>

<script>
// <span style="color:#0000CC;">id="test"要素に対して、Animationを定義</span>する。
// この際、幅は400(px)まで、durationは1sec、終末処理(easing method)=easeOutを指定。
var myAnim = new YAHOO.util.Anim('test', {width: { to: 400 }}, 
                                 1, 
                                 YAHOO.util.Easing.easeOut);
// Animation実行
myAnim.animate();

</script>

という感じになる。

同じことが、Animの違うコンストラクタを使い

var myAnim = new YAHOO.util.Anim('test');
myAnim.attributes.width = { to: 400 };
myAnim.duration = 0.5;
myAnim.method = YAHOO.util.Easing.easeOut;

myAnim.animate();

ともかけるらしい。

var attributes = {
   width: { to: 400 },
   height: { to: 400 }
};

var myAnim = new YAHOO.util.Anim('test', attributes);
myAnim.animate();

とかかれる、属性オブジェクト(上の例では、attributes)は、width, height, opacity, top, left, borderWidth, padding, marginなどと数字の組み合わせだが、to: xxxx、by: xxxxとか書かれるのが普通で、これは、Animationが、現在の姿からの変化を表すことが多いからとのこと。なるほど。

だが、場合によっては、

var attributes = {
   width: { from: 10, by: 200 },
   height: { from: 10, by: 200 }
};

var myAnim = new YAHOO.util.Anim('test', attributes);
myAnim.animate();

と、fromの指定もできるらしい。

また、通常は、指定する幅や高さの単位はpixだが、

var attributes = {
   width: { from: 1, to: 20, unit: 'em' },
   height: { from: 1, to: 20, unit: 'em' }
};

var myAnim = new YAHOO.util.Anim('test', attributes);
myAnim.animate();

と、unitを指定して単位を変えることもできると書いてある。(emは1文字をあらわす単位)

大事そうなのが、イベントに関する記述で、Animationユーティリティーには、

  • onStart
  • onTween
  • onComplete

のイベントにハンドラーをsubscribeできると書いてある。ここで挙げられている例は、

// イベントハンドラー(Animation終了後に設定される)
var removeElement = function() {
   // this.getEl()でイベントの発生した要素(id=test)を取得。引数が分かりずらい。
   var el = this.getEl();
   // イベントの発生した親ノードより、イベントを発生した要素を除去。
   el.parentNode.removeChild(el);
}

var myAnim = new YAHOO.util.Anim('test', { 
	  height: {to: 10} 
	}, 1, YAHOO.util.Easing.easeOut);

// Animation終了後のイベントとして、removeElementをsubscribe.
myAnim.onComplete.subscribe(removeElement);

myAnim.animate();

のように、Animation後に、それが発生した要素を削除するものが挙げられている。

このあとは、Animのサブクラスの

  • ColorAnim
  • Motion
  • Scroll

が例示されているが、Exempleの方にありそうなので、目を通すのみとする。