はじめに
jQueryの機能を大きく分けると、
JavaScriptでアニメーションの基本
まず始めに、
// topの初期値を設定
var top = 0;
// タイマー処理。1ms置きに実行
var timer = setInterval(function() {
// topの値を10増やす
top += 10;
// topの値を適用する
box.style.top = top + 'px';
// topの値が300以上になったらタイマーをクリアする
if (top > 300) {
clearInterval(timer);
}
}, 1);
ここではsetIntervalというJavaScriptのタイマー機能を使っています。このタイマー機能で1ミリ秒単位でtopの値を変更しています。実際には以下のように動きます。
これがJavaScriptでのアニメーションの基本になります。しかし実際には上記のような処理だと、
JavaScriptでのアニメーションに関して、
- これでできる! クロスブラウザJavaScript入門 第17回 アニメーションの基礎
- http://
gihyo. jp/ dev/ serial/ 01/ crossbrowser-javascript/ 0017
jQueryのanimateを使ったアニメーションの基本
jQueryでアニメーションする場合はanimateという関数を使います。animteは以下のように記述します。
.animete(アニメーションする属性, アニメーションの速度, 変化量, 終了時の処理)
必須なのはアニメーションする属性だけで、
$('#box').animate({ top: 300 });
これだけで先ほどのものとほぼ同じような動きになります。
また、
$('#box').animte({
top: 300,
width: 300
});
こうすると以下のようにtopとwidthの値を同時に変更したアニメーションを実装することが可能です。
もしくは以下のように指定できます。
.animate(アニメーションする属性, オプション)
属性のところは同じですが、
アニメーションの速度
次に第二引数で指定するアニメーションの速度について解説します。第二引数に指定できるのはアニメーションが始まってから終わるまでの秒数
$('#box').animate({ top: 300 }, 1000);
このように指定すると、
以下の例では自由にアニメーションの速度を指定できるようにしていますので試してみてください。
変化量
第三引数では変化量を指定します。変化量というのはイージング
アニメーション終了後の処理
アニメーションは非同期で動作します。非同期で動作するというのは、
$('#box').animate({ top: 300 });
alert('animate complete!');
このコードは以下のようになります。
なぜアニメーションが非同期で実行されるのかというと、
$('#box').animate({ top: 300 }, null, null, function() {
alert('animate complete!');
});
これで期待した動作になります。
jQuery組み込みのアニメーション
jQueryのアニメーションはこれまで紹介してきたanimate関数を使えば簡単なアニメーションから複雑なアニメーションまで実装することが可能ですが、
// スライドダウン
$('#box').slideDown();
// スライドアップ
$('#box').slideUp();
// スライドダウン/アップの切り替え
$('#box').slideToggle();
// フェードイン
$('#box').fadeIn();
// フェードアウト
$('#box').fadeOut();
// フェードイン/アウトの切り替え
$('#box').fadeToggle();
これらのショートカット関数にも、
$('#box').sldeDown('fast', 'linear', function() { ... });
もっと高度なアニメーション
アニメーションしている要素の取得
jQueryでは以下のような記述で現在アニメーション中の要素を取得できます。
$(':animated')
これにより、
アニメーションの停止
アニメーションを実行したときに前回のアニメーションが終わってない場合、
たとえばボタンを押したときにアニメーションを実行するという処理を実装する際に、
$('#box').stop();
これまで提示していた例ではすべてこの処理を入れているので参考にしてみてください。
連続したアニメーション
jQueryのアニメーションはただつなげて書くだけで簡単に連続したアニメーションを定義できます。以下のように書くと、
$('#box').animate({ top: 300 }).animate({ top: 0 });
これも上記で説明したキューというものに溜めて順次処理するためにこのような記述が可能になっています。また、
$('#box')
.animate({ top: 300 })
.delay(1000)
.animate({ top: 0 });
このように記述するとアニメーションの途中で1秒間待ってから再度アニメーションを開始します。
並列なアニメーション
連続したアニメーションではなく、
$('#box')
.animate({ top: 300 }, {
duration: 2000,
queue: false
})
.animate({ left: 300 }, {
duration: 1000
});
queueというのがキューに溜めるかどうかの指定で、
stepを使って処理毎に関数を実行する
stepにコールバック関数を設定することにより、
$('#box').animate({ top: 300 }, {
duration: 2000,
step: function(now) {
$now.text( now + 'px' );
}
});
これで今topの値がいくつなのかを画面に表示することができます。
プロパティごとにイージングを設定する
animateでは複数のプロパティを同時に指定できますが、
$('#box').animate({
top: [300, 'easeOutBounce'],
left: [300, 'linear']
}, 1000);
もしくは以下のように書いても同じです。
$('#box').animate({
top: 300,
left: 300
}, {
duration: 1000,
specialEasing: {
top: 'easeOutBounce',
left: 'linear'
}
});
これは以下のように動作します。
今回のお題
今回のお題はタブ切り替えのコンテンツにアニメーションを追加してリッチなUIにするというものです。以下のような単純にshowとhideで切り替えるだけのものを作成したのでこれのタブ切り替えをかっこいいアニメーションで切り替わるようにしてください。
fadeIn、