すごい広島 #17 でやったこと。 Raphael.js で遊んでみました。 Raphael.js は JavaScript で SVG を作成できるライブラリ。

今日作成したサンプルコードはGitHubにup してます。stepごとに タグを作成しているので、STEP1 のコードがみたい時は git checkout step-1 としてください。 step-5 まであります。

checkout したタグで rake server を実行すると、ローカルサーバが起動します。 http://localhost.com:8000 にアクセスしてみてください。

STEP1 とりあえず試す。

Raphael オブジェクトを作成すると自動的にSVGオブジェクトが挿入される。 絶対座標で挿入されるので、DOMの構築を待つ必要はなかった。

まずは円を描いてみる。

var paper = Raphael(10, 50, 320, 200);

// 円を書く at x = 50, y = 40,  半径 10
var circle = paper.circle(50, 40, 10);
// 赤色でぬりつぶす
circle.attr("fill", "#e00");

// 黒で境界線をかく
circle.attr("stroke", "#000");

STEP2 SVG を二つ作成してみる。

Rahael を二度呼べば構築できる。

var paper = Raphael(10, 50, 320, 200);

// 円を書く at x = 50, y = 40,  半径 10
var circle = paper.circle(50, 40, 10);
// 赤色でぬりつぶす
circle.attr("fill", "#e00");

// 黒で境界線をかく
circle.attr("stroke", "#000");

paper = Raphael(10, 240, 320, 200);

circle = paper.circle(50, 40, 40);
circle.attr("fill", "#00e");
circle.attr("stroke", "#000");

STEP3 アニメーションしてみる

2秒かけて移動させてみる

var paper = Raphael(10, 50, 320, 200);

var circle = paper.circle(50, 40, 10);
circle.attr("fill", "#e00");
circle.attr("stroke", "#000");

// 2000ms かけて x座標 320 まで移動
circle.animate({'cx': 320}, 2000);

element に対し animate メソッドでアニメーションできた。

第1引数にはアニメーション後の element の情報を指定する。

第2引数には アニメーションの実行時間を設定できる。 設定しないと 0 になり、一瞬で移動してしまう。

第1引数に指定できるパラメータは Element.attr を見ればよさそう。

STEP4 クリックイベントでアニメーションしてみる

円をクリックでアニメーションしてみる。

var paper = Raphael(10, 50, 320, 200);

var circle = paper.circle(50, 40, 10);
circle.attr("fill", "#e00");
circle.attr("stroke", "#000");

circle.click(function () {
  circle.animate({'cx': 320}, 2000);
});

STEP5 パスでも使ってみる。

好きな図形を書きたいので、パスをつかってみる。

var paper = Raphael(10, 50, 320, 200);

// (10, 20) へ移動
// (30, 40) へ線をひく
// (10, 40) へ線をひく
// (10, 20) へ線をひく
var path = paper.path("M 10 20  L 30 40  L 10 40  L 10 20");
path.attr('stroke',"#000");

Paper.path を利用すると描けた。

文字列で指定する。 SVG path string Format というルールに従う。

感想

リファレンスだけでもプログラミングが充分できるほどインターフェースがシンプルでした。動的に走査できるので、ちょっと遊べそうです。とても簡単。