script.aculo.usで、2つのエフェクトを交互に実行する

script.aculo.usにはエフェクトをトグルする機能が用意されている。

Effect.toggle($('element'), 'slide');

このようにすることで

  • 要素が見えている場合はSlideUpを適用して隠し、
  • 要素が見えていない場合はSlideDownを適用して出現させる

という処理を自動化できる。自分で判断しなくて良いので楽チンだ。

デフォルトでは

Effect.PAIRS = {
'slide': ['SlideDown','SlideUp'],
'blind': ['BlindDown','BlindUp'],
'appear': ['Appear','Fade']
},

という3組が用意されているが、これは自分で定義することも可能。
例えば以下のようにすると Grow ⇔ Shrink のトグルエフェクトが定義できる。

Effect.PAIRS['grow-shrink'] = ['Grow', 'Shrink'];
    // エフェクトを指定する順番に注意。「1つ目が出現系、2つ目が隠し系」と覚えれば良い。

適用するには次ように書く。

Effect.toggle($('element'), 'grow-shrink');


ちなみに、エフェクトにオプションを渡すにはtoggleの第3引数に書けば良い。

Effect.toggle($('element'), 'grow-shrink', {duration:0.5, afterFinish: function() { alert('finish!') }});