Velocity.jsのアニメーションやAjaxの実行順序をDeferredで管理する

deffered

最近アニメーションを作るときはVelocity.jsを多用しています。
ほぼjQueryのanimate()と同じ要領で軽快なアニメーションが作成できますが、複雑なアニメーションの場合はうまく処理を管理しないと後々ひどい目にあいます。

jQueryのanimate()でも強い武器になったDeferredをVelocity.jsでも使えないかと思い、試してみました。

jQueryのanimate()を使った場合の方法については下記記事をご参照ください。
Ajaxじゃなくても使える、$.Deferredで好きな処理を連鎖的に実行する方法

AD

やりたいこと

以下の処理を順番に実行することを目指します。

1.「Loading...」という文字を5回点滅させます。
2.XML(import.xml)をAjaxで読み込みます。読み込んだ内容はdiv#import内に書き込みます。
3.読み込み完了後、div#import内に読み込んだHTML(div.itemとなっています)のopacityを1にします。
4.div#importの枠線を赤にします。

何も考えずに処理を順番に書くだけだと、Ajaxの部分が完了する前に移行の処理に進んでしまったり、アニメーションが同時に実行されたりしてしまいます。

きちんと処理が終了してから次に進むように、Deferredを使って書いてみます。

デモ

デモはこちら

ブログのRSSをオフィシャルサイトの一部分に読み込む、みたいな処理を想定しています。

コード

velocity.jsには「complete」という処理完了後に実行する関数を指定するオプションがあるため、ここでresolve()として処理完了を伝えます。
そして関数自体はpromise()を返します。

これでwhen()やthen()で連鎖的な処理を行うことができます。

complete部分が入れ子祭りにならないのでだいぶマシではありますが、少々煩雑になりました。

velocity.jsにはシーケンス機能というものもあるようなので、さらによい方法がないかについて引き続き考えていきたいと思います。

AD

Share

Commentsコメント

メールアドレスは公開されません。コメントは必ずご入力ください。

HTMLタグは使用できません。ソースコードを書き込みたい場合はCodetterGistCodePenなどのご利用が便利です。

コメントはまだありません。