動きを指定する

アニメーション処理を行なう部分ではエレメントをどのような動きで移動させるかを指定することができます。YAHOO.util.Motion()の場合は4番目のパラメータで指定することができます。
動きの指定はYAHOO.util.Easingオブジェクト内で定義されており以下のものが定義されています。
YAHOO.util.Easing.easeNone
YAHOO.util.Easing.easeIn
YAHOO.util.Easing.easeOut
YAHOO.util.Easing.easeBoth
YAHOO.util.Easing.easeInStrong
YAHOO.util.Easing.easeOutStrong
YAHOO.util.Easing.easeBothStrong
YAHOO.util.Easing.elasticIn
YAHOO.util.Easing.elasticOut
YAHOO.util.Easing.elasticBoth
YAHOO.util.Easing.backIn
YAHOO.util.Easing.backOut
YAHOO.util.Easing.backBoth
YAHOO.util.Easing.bounceIn
YAHOO.util.Easing.bounceOut
YAHOO.util.Easing.bounceBoth

これをYAHOO.util.Motion()の4番目のパラメータに指定することでざまざまな動きを行なわせることができます。
実際のサンプルは以下のようになります(サンプル01を実行する)。

【サンプル01】
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>Sample</title>
<link rel="stylesheet" href="main.css" type="text/css" media="all">
<script type="text/javascript" src="http://yui.yahooapis.com/2.4.1/build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="http://yui.yahooapis.com/2.4.1/build/animation/animation-min.js"></script>
<script type="text/javascript"><!--
function moveContents(){
var mObj = new YAHOO.util.Motion("contents", {
points: { from:[500, 150], to : [ 30, 100] }
}, 0.5, YAHOO.util.Easing.backIn);
mObj.animate();
}
// --></script>
</head>
<body>
<h1>動きの方法を指定します</h1>
<form>
<input type="button" value="移動" onClick="moveContents()">
</form>
<div id="contents">ここが移動します</div>
</body>
</html>

YAHOO.util.Easing.〜は与えられたパラメータに従って計算した値を返すだけの関数です。例えばYAHOO.util.Easing.easeNoneでは以下のように関数が定義されています。

function (t, b, c, d) {
return c*t/d + b;
}

関数に渡されるパラメータは4つあり「現在の時間」「開始値」「開始値と終了値の差」「合計のアニメーションの長さ」になっています。これらの値を元にして自作の関数を作成すれば、独自の動きを行なわせることができます。
実際のサンプルは以下のようになります(手抜きなので、ガタガタと動くだけです)。(サンプル02を実行する

【サンプル02】
function moveContents(){
var mObj = new YAHOO.util.Motion("contents", {
points: { to : [ 0, 0] }
}, 0.5, myEaseFunc);
mObj.animate();
}
function myEaseFunc(t,b,c,d){
return Math.sin(t)*10;
}

[目次へ]