「サンプル【2】」では、「削除」時のエフェクトはEffect.Opacityでしたが、これを、Effect.DropOutに変更しました。
サンプル【3】(拡大表示はこちら、※注意:Operaブラウザでは、一部表示が異なる部分があります)
ソースコードは次のようになります。
deleteItem: function(id) { |
この「Effect.DropOut」のようなエフェクトをscript.aculo.usでは、「コンビネーションエフェクト」と呼んでいます。
コンビネーションエフェクトとは、コアエフェクトを組み合わせることでより凝ったビジュアルエフェクトを実現できるようにしたものです。
例えば、Effect.DropOutは、Effect.Opacityで、Opacityを「0」に近づけると同時に、Effect.Moveを用いて、表示位置を下に移動させることで実現されています。
コンビネーションエフェクトの利用の仕方は基本的にコアエフェクトと同じです。いろいろなエフェクトが用意されていますので、ぜひ試してみてください(参考「Combination Effects in script.aculo.us wiki」)。
「削除」時に、サンプル【3】で変更したEffect.DropOutを実行する前に、商品画像をゴミ箱にEffect.Moveするようにしました。
サンプル【4】(拡大表示はこちら、※注意:Operaブラウザでは、一部表示が異なる部分があります)
ソースコードは次のようになります。
deleteItem: function(id) { |
$('trash')で、ゴミ箱の位置を取得し、その座標に商品画像をEffect.Moveで移動させています。
今回のサンプルでは、Effect.Move、Effect.DropOutの「options」パラメータに、「queue: 'end'」が指定されています。これはscript.aculo.usの「Queue」という仕組みです。
エフェクトのオブジェクトを生成すると、新しい(疑似)スレッドが立ち上がり、その上で実行が行われます。そのため、Effect.MoveとEffect.DropOutを続けて書くと、2つのエフェクトが同時に実行されてしまいます。
もし、エフェクトを順番に実行させたい場合は、Queueを使用します。Queueとは、グローバルな待ち行列のようなもので、例えば、エフェクトAとエフェクトBがQueueの中に存在し、エフェクトCを「queue: 'end'」と指定すると、そのエフェクトは待ち行列の一番後ろに追加されます。
もし、エフェクトCを「queue: 'front'」と指定すると、待ち行列の先頭に追加されます(参考「Effect Queues in scriptaculous wiki」)。
「サンプル【4】」では、ゴミ箱への移動にEffect.Moveを使用しましたが、汎用的なパラメータの変化を行う、Effect.Morphを使用することでも同様のことが実現できます。
サンプル【5】(拡大表示はこちら、※注意:Operaブラウザでは、一部表示が異なる部分があります)
Effect.Moveの代わりに、次のように記述します。
deleteItem: function(id) { |
このように、複数のエフェクトを同期させながら実行させる仕組みがParallelです。
Parallelは、同時実行をさせたい要素を第1引数に配列として受け取ります。サンプル【5】では、下記の2つのエフェクトからなる配列を渡しています。
また、Parallelに渡される個々のエフェクトでは「options」に「sync: true」を指定します。これにより、一方のエフェクトだけが実行されたりすることなく、各エフェクトが同期を取りながら実行されます(参考「Effect.Parallel in script.aculo.us wiki」)。
Parallelを使うことで、デフォルトにはないコンビネーションエフェクトを作成することも可能になります。
最後に次ページでは、Transitionの使用例、自作のTransitionの適用例、自作エフェクトの作成例について解説します。
Copyright © ITmedia, Inc. All Rights Reserved.