縦に長いページ構成がどうにも垢抜けなかったので、script.aculo.us を使ってちょっとだけ今時風にしてみました。
今まで Javascript はブラウザによる振る舞いの差異が面倒くさすぎてなるべく近寄らないようにしていたのですが、初めて prototype.js および script.aculo.us を触ってみて、少しハマりそうになっています。一度これに手をつけてしまうと、もう javascript 無しの無骨なインターフェースではガマンできなくなりそうな気がする。
# といっても、今回は Ajax ライブラリたる script.aculo.us の Effect 機能しか使っていないので、これで script.aculo.us を使ったと言えるのかどうかははなはだ疑問ではある...。
ところで、レイヤーを切り替える際の フェードアウト(Effect.Fade) → フェードイン(Effect.Appear) の実装はただ並べて書いても2つのアニメーションのタイムラインが同時に走ってしまい意図通りの動作にはならないので、delay パラメータを使って
function changeLayer (elementname) {
hideLayer(current_layer);
showLayer(elementname);
current_layer = elementname;
}
function showLayer (elementname) {
new Effect.Appear($(elementname), {from:0.0, to:1.0, duration: 0.5, delay: 0.5});
}
function hideLayer (elementname) {
new Effect.Fade($(elementname), {from:1.0, to:0.0, duration: 0.5});
}
要点だけ書くと上記のような感じでやってるのだけど、これでよいのだろうか。どうもベストプラクティスではない気がしてならない。
(追記) Effect Que という概念がありそれを使えばよいらしいことが判明しました。