日替わり NAT’s Champloo

音楽やライブ(HM/HRやボカロなど)、旅行など、ごちゃっとした日記

script.aculo.usのEffectを使ってみる

script.aculo.usのEffectを使って、ちょっとしたサンプルを作ってみた。文字がマウスの位置を追いかけて動いたり、クリックすると震えたりするという、何の役にも立たないもの。
ソースコードはこんな感じ。jsディレクトリに、prototype.jsscript.aculo.usのjsファイルが置いてあるのが前提。

<html>
<head>
<title>Mouse Chaser</title>
<script src="js/prototype.js"></script>
<script src="js/scriptaculous.js"></script>
<script>
  var effect = null;
  var nextEffect = null;
  var hp = 5;
  function makeMoveEffect(element, x, y) {
    effect = new Effect.Move(
      element,
      { x: x, y: y, mode: 'absolute',
        afterFinish: effectFinished}
    );
  }
  function effectFinished() {
    effect = null;
    if(nextEffect != null) {
      makeMoveEffect(
        nextEffect.element, nextEffect.x, nextEffect.y);
    }
    nextEffect = null;
  }
  function mouseMove(e) {
    if(hp <= 0) return;
    var x = Event.pointerX(e);
    var y = Event.pointerY(e);
    var element = $('chaser');
    x = x - element.offsetWidth / 2;
    y = y - element.offsetHeight / 2;
    if(effect != null) {
      nextEffect = {
        element: element,
        x:x, y:y};
      return;
    }
    makeMoveEffect(element, x, y);
  }
  function clicked() {
    hp--;
    if(hp == 0) {
      new Insertion.Bottom('chaser', ' Dead!!');
      new Effect.Shrink('chaser', {duration: 3.0});
    } else {
      new Effect.Shake('chaser');
    }
  }
</script>
</head>
<body onMouseMove="mouseMove(event)">
  <div id="chaser" style="position:absolute" onClick="clicked()">
    Mouse Chaser
  </div>
</body>
</html>

マウスの位置へ文字が動くのに、Effect.Moveで1秒かけて移動させるので、ワンテンポ遅れた感じで動く。震えるのにはEffect.Shakeを使い、5回クリックするとEffect.Shrinkで小さくなって消える。
一応http://wiki.script.aculo.us/scriptaculous/show/HomePageにドキュメントがあるけど、細かいところまでは書いてないので、自分の思ったように動作させるには、ある程度ソースを読んだり、試行錯誤してみないといけないみたい。その辺りは、まだまだ発展途上ということなのだろうな。
script.aculo.usprototype.jsのソースの方も、JSONやthisキーワードとかを使いまくりで、今までに私が見たことのあるJavaScriptと全然違って見えるので、何だか違う言語みたい。