.animate()

.animate( properties [, duration] [, easing] [, complete] ) Returns: jQuery

説明: CSS プロパティの集合のカスタム・アニメーションを実行します。

  • version added: 1.0 .animate( properties [, duration] [, easing] [, complete] )

    propertiesアニメーションが動きながら向っていく CSS プロパティのマップ。

    durationアニメーションを実行している時間の長さを決定する文字列または 数値。

    easing変化に使用するイージング関数を表す文字列。

    completeアニメーションが完了したときに呼び出される関数。

  • version added: 1.0 .animate( properties, options )

    propertiesアニメーションが動きながら向っていく CSS プロパティのマップ。

    optionsメソッドへ渡す追加オプションのマップ。サポートキー:

    • duration: アニメーションを実行している時間の長さを決定する文字列または 数値。
    • easing: 変化に使用するイージング関数を表す文字列。
    • complete: アニメーションが完了したときに呼び出される関数。
    • step: アニメーションの各ステップの後で呼び出される関数。
    • queue: エフェクトのキューにアニメーションを配置するかどうかを示すブール値。 false の場合、アニメーションがすぐに開始されます。 jQuery 1.7 現在queue オプションは文字列も受取ることができます。その場合には、アニメーションは文字列によって表わされるキューに加えられます。
    • specialEasing: プロパティ引数とそれに対応するイージング関数で定義されているCSSプロパティの1つまたは複数のマップ(1.4 で追加)。

.animate() メソッドは、任意の数値CSSプロパティでアニメーション効果を作成することを可能にします。 唯一の必須パラメータは、CSSプロパティのマップです。 プロパティの範囲がより限定的であることを除いて、このマップは、.css() メソッドに送信することができるものと同じです。

アニメーションのプロパティと値

以下に記載されている以外の全てのアニメ化するプロパティは、1つの数値にアニメーションしなければなりません; 非数値であるほとんどのプロパティは、基本的なjQuery 関数を使用してアニメーション化することはできません (例えば、widthheight、または left はアニメ化できますが、background-color は、 jQuery.Color() を使用しない限りできません)。 プロパティ値は、他の指定をしない限り、ピクセル数として扱われます。指定できる単位は、em% です。

style プロパティに加えて、scrollTopscrollLeft のような非 style プロパティやカスタム・プロパティなどもアニメ化することができます。

ショートハンドCSSプロパティ(例えば、margin、background、border)は、サポートされません。 例えば、表示されているマージンを取得する場合は、次のものを使用してください: $(elem).css('marginTop') および $(elem).css('marginRight')、など。

数値に加えて、各プロパティには、文字列 'show''hide'、および code>'toggle' を指定することができます。 これらのショートカットにより、要素の表示タイプを考慮するカスタムの非表示および表示アニメーションが可能になります。

アニメーション・プロパティは、相対化することができます。 値の先頭に、文字シーケンス += または -= 付いている場合は、ターゲット値はプロパティの現在値から指定された数を加算または減算することによって計算されます。

注:.slideDown() および .fadeIn() のようなショートハンド・アニメーション・メソッドとは異なり、 .animate() メソッドは、非表示要素をエフェクトの一部として表示するようなことはしません 。 例えば、 $('someElement').hide().animate({height:'20px'}, 500), は、アニメーションが実行されますが、要素は非表示のままです

持続時間

持続時間(duration)は、ミリ秒で指定します。大きい値は、アニメーションが高速ではなく、低速であることを表します。 文字列の 'fast''slow' はそれぞれ、持続時間が 200 および 600 ミリ秒を設定するために使用することができます。

完全な関数

指定した場合、アニメーションが完了すると、完全なコールバック関数が起動されます。 これは、順に異なるアニメーションをつなぎ合わせるのに役立ちます。 コールバックは、引数を送信しませんが、this はアニメ化されているDOM要素に設定されています。 複数の要素がアニメ化されていれば、コールバックは、全体のアニメーションに一度でなく、マッチした要素毎に一回実行されます。

基本的な使用法

簡単な画像要素をアニメーション化します

<div id="clickme">
  Click here
</div>
<img id="book" src="book.png" alt="" width="100" height="123"
  style="position: relative; left: 10px;" />

画像の opacity、left オフセット、height を同時にアニメ化します:

$('#clickme').click(function() {
  $('#book').animate({
    opacity: 0.25,
    left: '+=50',
    height: 'toggle'
  }, 5000, function() {
    // Animation complete.
  });
});

height プロパティの target 値が 'toggle' であることに注意してください。 画像は始め表示されてるので、アニメーションでそれを非表示にするため、高さを 0 に縮小します。2回目のクリックでは、この遷移を逆にします:

画像の opacity は、すでにその目標値に達しているので、2度目のクリックでは、このプロパティはニメーション化されません。 left の目標値は相対値であるため、画像はこの2度目のアニメーション中でも、さらに右に移動します。

方向プロパティ (toprightbottomleft) は、position スタイルプロパティがデフォルトの static であれば、 要素への認識可能な効果はでません。

注: jQuery UI プロジェクトは、color のようないくつかの非数字のスタイルをアニメーション化することを可能にすることにより、.animate() メソッドを拡張しています。 プロジェクトには、さらに個々の属性よりも、CSSのクラスを介してアニメーションを指定するためのメカニズムが含まれています。

注: オーバーフローが原因で、要素のコンテンツが表示されている 0px の高さまたは幅を持った要素をアニメーション化しようとする場合、 jQuery は、アニメーション中にこのオーバーフローを切り取るでしょう。 しかし、表示されていない元の要素の寸法を固定することにより、アニメーションがスムーズに実行されることを確認することが可能です。 clearfix は、手動で設定するのではなく、自動的に主要素の寸法を修正するのに使用することができます。

Step 関数

.animate() の第2のバージョンは、step オプション(アニメーションの各ステップで始動されるコールバック関数)を提供します。 この機能は、カスタムアニメーションタイプを有効にするか、または発生中のアニメーションを変更する場合に便利です。 2つの引数(nowfx)を取り、this は、アニメーション化されているDOM要素に設定されています。

  • now: 各ステップでアニメーション化するプロパティの数値
  • fx: アニメ化された要素の elem 、アニメ化されたプロパティのそれぞれ最初と最後の値の startend、アニメ化されたプロパティの prop のようなプロパティ数が含まれる、jQuery.fx プロトタイプ・オブジェクトの参照。

step 関数は、各アニメーション要素の各アニメーションプロパティに対して呼ばれることに注意してください。 たとえば、2つの list 項目が与えられた場合、step 関数は、アニメーションの各ステップで 4回 始動します:

$('li').animate({
  opacity: .5,
  height: '50%'
},
{
  step: function(now, fx) {
    var data = fx.elem.id + ' ' + fx.prop + ': ' + now;
    $('body').append('<div>' + data + '</div>');
  }
});

イージング

.animate() の残りのパラメータは、使用するイージング関数名を表す文字列です。 イージング関数は、アニメーションがアニメーション内の異なるポイントへ進行する速度を指定します。 jQuery ライブラリ唯一のイージングの実装は、デフォルトで swing と呼ばれ、linear と言う一定の速度で進行するものです。プラグイン、特に jQuery UI スイート 利用することで多くのイージング関数を使用することができます

プロパティごとのイージング

jQuery バージョン 1.4 時点では、1回の .animate() 呼出し内でプロパティごとのイージング関数を設定することができます。 .animate() の最初のバージョンでは、各プロパティの値として配列にすることができます: 配列の最初のメンバは CSSプロパティで、2番目のメンバはイージング関数です。プロパティごとのイージング関数が、特定のプロパティに対して定義されていない場合、 .animate() メソッドのオプション・イージング引数の値を使用します。イージングの引数が定義されていない場合は、デフォルトの swing 関数が使用されます。

例えば、幅と高さを swing のイージング関数でアニメーション化し、同時に、linear イージング関数で不透明にする場合には:

$('#clickme').click(function() {
  $('#book').animate({
    width: ['toggle', 'swing'],
    height: ['toggle', 'swing'],
    opacity: 'toggle'
  }, 5000, 'linear', function() {
      $(this).after('<div>Animation complete.</div>');
  });
});

.animate() の第2バージョンでは、オプションのマップは、CSS プロパティとそれに対応するイージング関数のマップである specialEasing プロパティを含めることができます。 例えば、linear イージング関数を使用して幅をアニメーション化し、同時に easeOutBounce イージング関数を使用して高さをアニメーション化する場合には:

$('#clickme').click(function() {
  $('#book').animate({
    width: 'toggle',
    height: 'toggle'
  }, {
    duration: 5000,
    specialEasing: {
      width: 'linear',
      height: 'easeOutBounce'
    },
    complete: function() {
      $(this).after('<div>Animation complete.</div>');
    }
  });
});

前述したように、easeOutBounce 関数にはプラグインが必要となります。

補注:

  • 効率的に継続時間を 0 にする jQuery.fx.off = true を設定することで、.animate() を含む全てのjQuery効果をグローバルにオフにすることができます。詳しくは、jQuery.fx.offを参照してください。
  • requestAnimationFrame()の特質上、setIntervalsetTimeout ループを使用して、アニメーションをキューイングしてはいけません。 CPU 資源を守るために、ウィンドウ/タブが表示されない時には、requestAnimationFrame をサポートするブラウザはアニメーションを更新しません。アニメーションを一時停止しているときに、setIntervalsetTimeout を通してアニメーションのキューを続行する場合、ウィンドウ/タブがフォーカスを再取得したときにキューに入っているアニメーションのすべての再生が開始されます。 この潜在的な問題を回避するために、ループの最後のアニメーションにコールバックを使用するか、次のアニメーションを開始するためにタイムアウトを設定する、要素 .queue() に関数を付加します。

例:

例:ボタンをクリックして、いろいろなプロパティの数値を持つ div をアニメ化します

<!DOCTYPE html>
<html>
<head>
  <style>
div {
background-color:#bca;
width:100px;
border:1px solid green;
}
</style>
  <script src="/files/jquery.js"></script>
</head>
<body>
  <button id="go">&raquo; Run</button>
<div id="block">Hello!</div>
<script>
/* Using multiple unit types within one animation. */
$("#go").click(function(){
  $("#block").animate({
    width: "70%",
    opacity: 0.4,
    marginLeft: "0.6in",
    fontSize: "3em",
    borderWidth: "10px"
  }, 1500 );
});
</script>
</body>
</html>

デモ:

例:divの left プロパティに、相対的な値を持ったアニメです。相対的なアニメーションがキューイングされるのを見るために、ボタンを数回クリックしてください。

(移動した位置を基準に、更に左右へ移動することがキューイングの意味合いか)
<!DOCTYPE html>
<html>
<head>
  <style>
div {
  position:absolute;
  background-color:#abc;
  left:50px;
  width:90px;
  height:90px;
  margin:5px;
}
</style>
  <script src="/files/jquery.js"></script>
</head>
<body>
  <button id="left">&laquo;</button> <button id="right">&raquo;</button>
<div class="block"></div>
<script>
$("#right").click(function(){
  $(".block").animate({"left": "+=50px"}, "slow");
});
$("#left").click(function(){
  $(".block").animate({"left": "-=50px"}, "slow");
});
</script>
</body>
</html>

デモ:

例:最初のボタンは、unqueued アニメーションがどのように動作するかを示しています。フォントサイズが大きくなっている間に、divの外側の幅が90%に拡張されます。フォントサイズの変更が完了すると、ボーダーのアニメーションが開始されます。 2番目のボタンは、伝統的なチェーン・アニメーションを開始します。いったん要素の前のアニメーションが完了すると、次の各アニメーションがスタートします。

<!DOCTYPE html>
<html>
<head>
  <style>
div {
  background-color:#bca;
  width:200px;
  height:1.1em;
  text-align:center;
  border:2px solid green;
  margin:3px;
  font-size:14px;
}
button {
  font-size:14px;
}
</style>
  <script src="/files/jquery.js"></script>
</head>
<body>
  <button id="go1">&raquo; Animate Block1</button>
<button id="go2">&raquo; Animate Block2</button>
<button id="go3">&raquo; Animate Both</button>
<button id="go4">&raquo; Reset</button>
<div id="block1">Block1</div>
<div id="block2">Block2</div>
<script>
$( "#go1" ).click(function(){
  $( "#block1" ).animate( { width: "90%" }, { queue: false, duration: 3000 })
     .animate({ fontSize: "24px" }, 1500 )
     .animate({ borderRightWidth: "15px" }, 1500 );
});
$( "#go2" ).click(function(){
  $( "#block2" ).animate({ width: "90%" }, 1000 )
     .animate({ fontSize: "24px" }, 1000 )
     .animate({ borderLeftWidth: "15px" }, 1000 );
});
$( "#go3" ).click(function(){
  $( "#go1" ).add( "#go2" ).click();
});
$( "#go4" ).click(function(){
  $( "div" ).css({ width: "", fontSize: "", borderWidth: "" });
});
</script>
</body>
</html>

デモ:

例:最初の div の left プロパティをアニメーション化し、残りの div を同期させるため、アニメーションの各段階で left プロパティを設定するのに step 関数を使用します。

<!DOCTYPE html>
<html>
<head>
  <style>
div {
   position: relative;
   background-color: #abc;
   width: 40px;
   height: 40px;
   float: left;
   margin: 5px;
}
</style>
  <script src="/files/jquery.js"></script>
</head>
<body>
<p><button id="go">Run »</button></p>
<div class="block"></div> <div class="block"></div>
<div class="block"></div> <div class="block"></div>
<div class="block"></div> <div class="block"></div>
<script>
$( "#go" ).click(function(){
  $( ".block:first" ).animate({
    left: 100
  }, {
    duration: 1000,
    step: function( now, fx ){
      $( ".block:gt(0)" ).css( "left", now );
    }
  });
});
</script>
</body>
</html>

デモ:

例:全てのパラグラフの高さと不透明度をトグルするアニメーションで、600ミリ秒以内にアニメーションは完了します。

$( "p" ).animate({
  "height": "toggle", "opacity": "toggle"
}, "slow" );

例:全てのパラグラフを left 50 および opacity 1 (不透明、可視)にするアニメーションで、500ミリ秒以内のアニメーションを完了します。

$( "p" ).animate({
  "left": "50", "opacity": 1
}, 500 );

例:異なるスタイルのアニメーションを提供するために、"イージング"関数を使用した例を示します。これは、イージング関数を提供するプラグインを持っている場合にのみ動作します。パラグラフ要素が非表示でない限り、このコードは何もしないので注意してください

$( "p" ).animate({
  "opacity": "show"
}, "slow", "easein" );

例:全てのパラグラフの高さと不透明度をトグルするアニメーションで、600ミリ秒以内にアニメーションは完了します。

$( "p" ).animate({
  "height": "toggle", "opacity": "toggle"
}, { duration: "slow" });

例:全てのパラグラフを left 50 および opacity 1 (不透明、可視)にするアニメーションで、500ミリ秒以内のアニメーションを完了します。また、それは自動的にその順番を待たずに開始されます。つまり、キュー外でそれを行います。

$( "p" ).animate({
  left: "50px", opacity: 1
}, { duration: 500, queue: false });

例:異なるスタイルのアニメーションを提供するために、"イージング"関数を使用した例を示します。これは、イージング関数を提供するプラグインを持っている場合にのみ動作します。

$( "p" ).animate({
  "opacity": "show"
}, { "duration": "slow", "easing": "easein" });

例:コールバック関数の使用例です。最初の引数はCSSプロパティの配列で、2番目はアニメーションが完了するまでの時間(1000ミリ秒)、3番目はイージングのタイプ、4番目の引数は匿名のコールバック関数です。

$( "p" ).animate({
  height:200, width:400, opacity: .5
}, 1000, "linear", function(){ alert("all done"); });