ちょっとしたメモです。jQueryでanimateをメソッドチェーンでつないでいく最中に、一カ所だけアニメーションを遅らせて実行させたいという時はdelayメソッドを使えばできます。結構使う機会がありそうなメソッドかと思います。ということで簡単な使い方とちょっとしたサンプルです。
[ads_center]
delayを使ってみる
以下はboxというクラス名のdiv要素を右→下→左→上と時計回りに一周した後に、div.boxの背景を変えて「sample」というテキストを表示させるサンプルです。
で、この時に最後の「左から上」に行くアニメーションにdelayをかけています。図にするとこんな感じです。
コードはこんな感じです。
JavaScript
$(function(){ $('.move').click(function(){ $('.box').animate({ left: 200 }, 1000) .animate({ top: 100 }, 1000) .animate({ left: 0 }, 1000).delay(1000) .animate({ top: 0 }, 1000, showtext); }); var showtext = function(){ setTimeout(function(){ $('.box').css({ background:'#ccc' },1000).text('sample'); },2000); }; });
これで4番目のアニメーションの時に1秒間だけ遅れて実行されるようになります。
サンプル
delayはキューの実行を遅らせるので、アニメーション以外の処理を制御させたい場合はsetTimeoutなどを使えばいいみたいです。
なので、上記では一番最後に背景とテキストを追加する動作をsetTimeoutを使ってアニメーションが終了してから2秒後に実行するようにしてみました。delayでも試してみたんですが、さっぱり動きませんでした。以下の記事が参考になるかと思います。