JQueryのアニメーション実装方法
今回は、cssのスタイルを少しずつ変化させるアニメーションについて紹介します。jQueryにはanimate()メソッドを使い、簡単に実装できます。それでは具体的に説明していきます。
■アニメーションの実装
$(function(){
$('#typo').on('click', function(){
$('#typo .inner').animate({
opacity: 0,
fontSize: '0px'
},
1500
);
});
});
目次
コードの解説
1・2行目については前回の記事で紹介しているので割愛します。
ここではアニメーションの部分のみ解説します。
■animate()メソッドの実装
$('#typo .inner').animate({
opacity: 0,
fontSize: '0px'
},
1500
});
上記のコードでは、#typo .innerのcssに対してanimate()メソッドを実行します。
animate()メソッドは処理対象をアニメーションするメソッドです。アニメーションの内容はanimate()メソッドの引数に指定します。
■animate()メソッドの構文
.animate({
'cssプロパティ': '値',
'cssプロパティ': '値',
'cssプロパティ': '値'
},
アニメーション時間
});
animate()メソッドの1つめの引数
animate()メソッドの1つめの引数にはアニメーション完了時の見た目を表現するcssプロパティと値を渡します。各cssプロパティと値の書き方は、複数のスタイルを同時に変更するときと同じです。
animate()メソッドが実行されると現在のcssの状態から1つめの引数にしているcssの状態へアニメションされます。つまり、今回のアニメーションは以下のことが実行されます。
- 要素の不透明度が徐々に透明になる
- 要素の文字サイズが徐々に0pxになる
animate()メソッドの2つめの引数
2つめの引数はどのぐらい時間をかけてアニメーションさせるかということを示しています。時間の単位はミリ秒です。2000と指定すると2秒かけてアニメーションするということになります。
■2つめの引数
$('#typo, .inner').animate({
opacity: 0,
fontSize: '0px'
},
1500
});
その他主な引数について
animate()メソッドの引数は、cssのオブジェクトやアニメーション時間以外にもさまざな値を指定できます。今回は頻繁に利用する主な引数を2つご紹介します。その2つは、イージングの種類をアニメーション終了時に実行する処理です。
■animate()メソッドの引数にイージングの種類とアニメーション終了時に実行する処理
.animate({
アニメーション用css
},
アニメーション時間,
'イージングの種類';
function(){
アニメーション終了時に実行する処理
}
});
これらの指定は任意であり、いずれか一方のみ記述でも省略することも可能です。
イージングの種類
animate()メソッドでは、3つめの引数としてイージングの種類を指定できます。イージングとはアニメーションの変化の度合いです。jQueryにはlinear(等速)とswing(軽い緩急)の2種類があります。コードを省略した場合はswingが適用されます。
| 種類 | 説明 |
|---|---|
| liner | 等速。緩急がなく、一定のスピードでアニメーションする |
| swing | 軽い緩急。アニメーションの変化する速度を設定 |
■イージングの例
$(function(){
$('#typo .inner')
.css('top', '-200px')
.on('click', function(){
$('#typo .inner').animate({
top: '100px'
},
1500,
'linear'
);
});
});
上記のコードは対応のjQueryオブジェクト(#typo .inner)に対して以下の処理を実行しています。
- 読み込み時は.css(‘top’, ‘-200px’)を実行して文字列の位置を変更している
- 要素をクリックするとanimate()メソッドが実行される
- animate()メソッドで文字列をtop:’100px’の位置に徐々に移動させている
今回はlinearを指定しましたが、swingを指定するとふわっと移動するように変更されます。
アニメーション終了時に実行する処理
animate()メソッドでは、アニメーション終了時に実行する処理を指定することも可能です。この場合はメソッドの引数にfunction(){}を指定します。下記はそのサンプルコードです。
■アニメーション終了時に実行する処理
$(function(){
$('#typo .inner')
.css('top', '-100px')
.on('click', function(){
$('#typo .inner').animate({
top: '100px'
},
1500,
function(){
$('#typo .inner').animate({top: '0px'}, 500);
}
);
});
});
上記のコードを記述すると、アニメーション終了時に$(‘#typo .inner’).animate({top:’0px’},500);の処理が実行されます。つまり、アニメーション全体の動きはtop→100px→0pxの位置に移動するアニメーションになります。
animate()メソッドの注意点
animate()メソッドでは、アニメーション中の同じ要素に対して、別のanimate()メソッドを実行しても、途中段階のアニメーションはキャンセルされず、順番待ちをする仕様になっえています。
■animate()メソッドの仕様について
$(function(){
$('#typo')
.on('mouseover', function(){
$('#typo').animate({
backgroundColor: 'ae5e9b'
},
500
);
})
.on('mouseout', function(){
$('#typo').animate({
backgroundColor: '#34989db'
},
500
);
});
});
上記コードについて一見正しいように思えますが、マウスオーバーとマウスアウトをすばやく繰り返した場合、思った通りの動作にならないです。例えば、マウスオーバーのアニメーションが途中であっても、その動作をキャンセルしてマウスアウトのアニメーションは実行されません。
実行中のアニメーションを途中でキャンセルする方法
アニメーションを途中でキャンセルするにはstop()メソッドを追加します。stop()メソッドは要素のアニメーションを停止するメソッドです。引数にtrueもしくはfalseを指定します。デフォルトはfalseです。
■stop()メソッドのコード
stop(true | false)
それでは先ほどのコードにstop()メソッドを追加してみます。
■animate()メソッドを追加
$(function(){
$('#typo')
.on(mouseover, function(){
$('#typo').stop(true).animate({
backgroundColor: '#ae5e9b'
},
500
);
})
.on('mouseout', function(){
$('mouseout').stop(true).animate({
backgroundColor: '#3498db'
},
500
);
});
});
上記のコードで正常な動作になります。注意点としては、stop()メソッドはanimate()メソッドよりも前に記述する必要があります。