【JavaScriptTips】アニメーションのタイミングを調整する
こんにちは。プロダクト事業本部の佐藤です。
今日はjQueryでアニメーションをさせる場合のタイミングの管理についてまとめてみたいと思います。
■アニメーションとキュー
jQueryでアニメーション処理を書く場合、同一の要素に対して複数のアニメーションを指定すると、ひとつひとつ順番に実行されます。メソッドチェーンのかたちで書いても書かなくても同じです。
$('#box').fadeOut(500).fadeIn(500);
// ↓も同じ
//$('#box').fadeOut(500);
//$('#box').fadeIn(500);
ですが、複数の要素それぞれに対してアニメーションを指定した場合は、同時に実行されます。
$('#box1').fadeOut(500).fadeIn(500);
$('#box2').fadeOut(500).fadeIn(500);
上記のコードでは、box1もbox2も同時にアニメーションします。box1の処理が終わってからbox2が処理されるわけではありません。しかし、それぞれの要素に指定したfadeOutとfadeInは順番に実行されています。
jQueryのアニメーションは、要素ごとに、キューとして管理されます。要素ごとの管理なので、同じ要素に複数のアニメーションを指定した場合は、その要素のキューにどんどん追加され、順番に実行されていきます。別な要素にアニメーションを指定した場合は、別なキューに入るので、同時に実行されます。
■animateメソッド
fadeOutやfadeInのようなメソッドは、animateメソッドのショートカットです。そしてそのanimateメソッドを直接使えば、複数の動きをひとつのアニメーションとして実行させることもできます。
$('#box')
.animate({
opacity: 0,
width: 0,
height: 0
}, 500)
.animate({
opacity: 1,
width: 100,
height: 100
}, 500)
;
透明度(opacity)と幅(width)と高さ(height)に関する3つの動作がひとつのアニメーションとして扱われます。そして、ひとつの要素に対してanimateメソッドを複数回呼び出すとそれらはキューに登録されるので、ふたつのアニメーションが順番に実行されます。
■delayメソッド
delayメソッドを使うと、キューに待ち時間を指定することができます。
$('#box').fadeOut(500).delay(1000).fadeIn(500);
フェードアウトして、少し待って、フェードインします。
$('#box1').fadeOut(500).fadeIn(500);
$('#box2').delay(1000).fadeOut(500).fadeIn(500);
通常ならbox1とbox2のアニメーションは同時に実行されますが、box1のアニメーションが終わってからbox2がアニメーションしているように見せることができます。実際には、box1がアニメーションしているあいだ、box2がdelayによって待っているだけです。
delayをうまく使うといろいろな効果が出せるようになります。
$('.box').each(function(i){
$(this).delay(i * 200).fadeTo(500, 0).delay(1000).fadeTo(500, 1);
});
このように、複数の要素に少しずつ時間をずらしたアニメーションをさせることでオシャレな効果を出すこともできます。
■まとめ
キューの考え方を理解し、animateメソッドで複数の動きをひとつにまとめたり、複数のキューの動きdelayで調整したりすることで、アニメーションの実行タイミングを自由に調整できます。自分でいろいろ試してみると、より感覚がわかってくると思います。




このブログを購読する
2011.01.31









