<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Raphael &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/raphael/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Wed, 18 Dec 2013 01:19:02 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>&#034;SVG&#034; &#8211; Alphabetical Advent Calendar 2013</title>
		<link>https://blog.mach3.jp/2013/12/18/jaac2013-s-svg.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Wed, 18 Dec 2013 01:19:02 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Advent Calendar 2013]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Raphael]]></category>
		<category><![CDATA[Snap.svg]]></category>
		<category><![CDATA[SVG]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3754</guid>

					<description><![CDATA[&#8220;S&#8221; は SVG の &#8220;S&#8221;。 SVG SVG（Scalable Vector Graphics）は、Webページ上でベクターグラフィックを扱う為のマークアップ言語です。 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>&#8220;S&#8221; は SVG の &#8220;S&#8221;。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-XUrPw_pet0s/UqR4lTXOk8I/AAAAAAAACYg/EboU7AOOUJg/s400/ac2013-s.png" alt="S"/></figure>



<p></p>



<span id="more-3754"></span>



<h2 class="wp-block-heading">SVG</h2>



<p><strong>SVG（Scalable Vector Graphics）</strong>は、Webページ上でベクターグラフィックを扱う為のマークアップ言語です。 ベクターなので拡縮してもビットマップデータのように劣化しないのが特徴で、 アイコンやイラスト・アニメーション等で幅広く活躍できます。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">svg</span> <span class="hljs-attr">width</span>=<span class="hljs-string">"40"</span> <span class="hljs-attr">height</span>=<span class="hljs-string">"40"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">path</span> <span class="hljs-attr">d</span>=<span class="hljs-string">"M16,22.375L7.116,28.83l3.396-10.438l-8.883-6.458l10.979,0.002L16.002,1.5l3.391,10.434h10.981l-8.886,6.457l3.396,10.439L16,22.375L16,22.375z"</span> <span class="hljs-attr">fill</span>=<span class="hljs-string">"black"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">path</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">svg</span>&gt;</span>
</code></span></pre>


<p>このコードをHTMLに挿入すると、ベクターで描かれた星印が表示されます。 上で使用されている <strong>path</strong> の他、<strong>rect</strong> や <strong>circle</strong> などを使って様々なグラフィックを描く事が出来ます。</p>



<p>IEではSVGをサポートするのがバージョン9以降な為、 旧来より実装されていた <strong>VML（Vector Markup Language）</strong>で代用されたりします。</p>



<h2 class="wp-block-heading">Raphael</h2>



<p><a href="http://raphaeljs.com/">http://raphaeljs.com/</a></p>



<p><strong>Raphael</strong> は比較的老舗なべクターグラフィックライブラリで、 SVGライブラリの中ではデファクトスタンダードとの呼び声が高い物です。 SVGが使える環境ならばSVGを使い、そうでない場合はVMLで代用してベクターコンテンツを扱う事ができます。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"canvas"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="actionscript">

<span class="hljs-comment">// #canvas にキャンバスを生成する</span>
<span class="hljs-keyword">var</span> paper = Raphael(<span class="hljs-string">"canvas"</span>);

<span class="hljs-comment">// キャンバスに円を描く</span>
<span class="hljs-keyword">var</span> circle = paper.circle(<span class="hljs-number">24</span>, <span class="hljs-number">24</span>, <span class="hljs-number">16</span>);
circle.attr({
    <span class="hljs-string">"fill"</span>: <span class="hljs-string">"#c00"</span>,
    <span class="hljs-string">"stroke-width"</span>: <span class="hljs-number">0</span>
});

</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p><strong>Raphael()</strong> でキャンバスを生成し、 そのキャンバスに対して <strong>circle</strong> / <strong>rect</strong> / <strong>path</strong> などを使用してグラフィックを描きます。</p>



<p>Raphael で描かれた図形要素には、属性を編集する <strong>attr()</strong> の他、 各種イベントハンドラを設定する為のメソッド等が実装されています。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-comment">// マウスオーバーイベントを設定する</span>
circle.hover(
    <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-keyword">this</span>.animate({
            <span class="hljs-string">"fill"</span>: <span class="hljs-string">"#00c"</span>
        }, <span class="hljs-number">500</span>);
    },
    <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-keyword">this</span>.animate({
            <span class="hljs-string">"fill"</span>: <span class="hljs-string">"#c00"</span>
        }, <span class="hljs-number">500</span>);
    }
);

<span class="hljs-comment">// クリックイベントを設定する</span>
button.click(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"click"</span>);
});
</code></span></pre>


<p>さながら jQuery のSVG版といった感覚で使えます。</p>



<h2 class="wp-block-heading">Snap.svg</h2>



<p><a href="http://snapsvg.io/">http://snapsvg.io/</a></p>



<p>Snap.svg はRaphaelの作者が開発し、Adobe からリリースされた生まれて間もないプロジェクトです。 （2013/10/23 に初リリースされています。）</p>



<p>最も大きな違いは、snap.svg は SVG をサポートする環境の為だけのもので、 VMLによる古い環境へのサポートは一切しないと宣言している点です。 そうすることで、SVG にあって VML にはないような先進的な機能を利用出来る為です。 また、VML対応を無くす事によりライブラリ自体の軽量化も図れている模様です。</p>



<p>開発者が同じなだけあり、使い方はRaphaelからほぼ変わりません。（これは素晴らしいことです） 試しに Raphael での例と同じ処理をしてみましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">svg</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"canvas"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">svg</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="javascript">
    <span class="hljs-comment">// 対象要素は svg 要素である必要があります</span>
    <span class="hljs-keyword">var</span> paper = Snap(<span class="hljs-string">"#canvas"</span>);
    <span class="hljs-keyword">var</span> circle = paper.circle(<span class="hljs-number">24</span>, <span class="hljs-number">24</span>, <span class="hljs-number">16</span>);
    circle.attr({
        <span class="hljs-string">"fill"</span>: <span class="hljs-string">"#c00"</span>,
        <span class="hljs-string">"stroke-width"</span>: <span class="hljs-number">0</span>
    });
    circle.hover(
        <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
            <span class="hljs-keyword">this</span>.animate({
                <span class="hljs-string">"fill"</span>: <span class="hljs-string">"#00c"</span>
            }, <span class="hljs-number">500</span>);
        },
        <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
            <span class="hljs-keyword">this</span>.animate({
                <span class="hljs-string">"fill"</span>: <span class="hljs-string">"#c00"</span>
            }, <span class="hljs-number">500</span>);
        }
    );
    circle.click(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"click"</span>);
    });
</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>Raphael() が <strong>Snap()</strong> に変わったことと、渡す要素が svg 要素である必要がある事をのぞいて、 間違い探しの問題かと思うほどにほぼ一致しています。</p>



<p>また、Raphael にはなかった機能のひとつとして、「外部SVGリソースのインポート」があります。 外部SVGファイルをAjaxで取得し、その結果をコールバックで展開する事が出来ます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">Snap.load(<span class="hljs-string">"external.svg"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">f</span>)</span>{ ... });
</code></span></pre>


<p>他にもマスキングやパターンのクリッピングなど先鋭的な機能が揃えられています。 <a href="http://snapsvg.io/start/">公式のチュートリアル</a> ではコードを追いながら使い方を学ぶ事が出来ます。 ここのページャーのアニメーションも気が利いていてかわいいですね。</p>



<p>Raphael がそうであったように、新世代のSVGライブラリのスタンダードになりそうな予感がしますね。</p>



<h2 class="wp-block-heading">参考資料</h2>



<ul class="wp-block-list">
<li><a href="http://ja.wikipedia.org/wiki/Scalable_Vector_Graphics">Scalable Vector Graphics &#8211; Wikipedia</a></li>



<li><a href="https://developer.mozilla.org/en/docs/Web/SVG">SVG | MDN</a></li>



<li><a href="http://www.w3.org/Graphics/SVG/">W3C SVG Working Group</a></li>



<li><a href="http://raphaeljs.com/">Raphaël—JavaScript Library</a></li>



<li><a href="http://snapsvg.io/">Snap.svg &#8211; Home</a></li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>はじめてのRaphael (2) : イベント編</title>
		<link>https://blog.mach3.jp/2011/12/27/get-started-with-raphael-02.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 27 Dec 2011 00:59:59 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Raphael]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[XML]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2215</guid>

					<description><![CDATA[Raphaelチュートリアルの第二回です。 今回は、描画された図のマウスイベントを操作する方法を紹介します。 シンプルな例 まずはシンプルな例から。 紙に円を描き、マウスでクリックされた時になんらかの処理を行います。 E [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Raphaelチュートリアルの第二回です。<br />
今回は、描画された図のマウスイベントを操作する方法を紹介します。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/-w_T4nvskWAY/TviL_ZGH7KI/AAAAAAAABbw/1IWLCmMQhsc/s400/201112262358.png" alt="はじめてのRaphael (2) : イベント編"/></figure>



<p></p>



<span id="more-2215"></span>



<h2 class="wp-block-heading">シンプルな例</h2>



<p>まずはシンプルな例から。<br />
紙に円を描き、マウスでクリックされた時になんらかの処理を行います。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-keyword">var</span> paper, myCircle, onClick ;

    <span class="hljs-comment">/**
     * 紙に円を描きます。
     * myCircleには、Elementオブジェクトが格納されます。
     */</span>
    paper = <span class="hljs-keyword">new</span> Raphael( <span class="hljs-string">"paper"</span>, <span class="hljs-number">640</span>, <span class="hljs-number">480</span> );
    myCircle = paper.circle( <span class="hljs-number">100</span>, <span class="hljs-number">100</span>, <span class="hljs-number">32</span> )
        .attr( { <span class="hljs-attr">fill</span> : <span class="hljs-string">"#345"</span>, <span class="hljs-attr">stroke</span> : <span class="hljs-string">"none"</span> } );

    <span class="hljs-comment">/**
     * Element.click() で
     * マウスクリックイベントのハンドラを設定できます。
     * ハンドラ内のthisはElementオブジェクトです。
     */</span>
    myCircle.click( <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-built_in">console</span>.log( <span class="hljs-keyword">this</span>.type ); <span class="hljs-comment">// =&gt; "circle"</span>
        alert( <span class="hljs-string">"さわんな！"</span> );
    });

})();
</code></span></pre>


<p>Element.click() メソッドの引数に関数を渡すだけなので、とても簡単。</p>



<p>円に限らず、ほとんどのシェイプ描画メソッドはElementオブジェクトを返します。<br />
イベントやアニメーションをいじりたい場合は、<br />
この例での変数「myCircle」のように返り値を格納しておくと良いですね。<br />
勿論、メソッドチェーンで一気に書いてしまう事もできます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">paper.circle( <span class="hljs-number">100</span>, <span class="hljs-number">100</span>, <span class="hljs-number">32</span> )
    .attr( { <span class="hljs-attr">fill</span> : <span class="hljs-string">"#345"</span>, <span class="hljs-attr">stroke</span> : <span class="hljs-string">"none"</span> } )
    .click( <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        alert( <span class="hljs-string">"さわんな！"</span> );
    });
</code></span></pre>


<h3 class="wp-block-heading">イベントハンドラの登録解除</h3>



<p>設定したイベントハンドラを解除するのは、<br />
そのメソッドに接頭辞「un」をつけたメソッドを使います。<br />
例えばclick() で登録したハンドラの登録解除は、unclick() を使用します。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">/**
 * click() で登録
 */</span>
<span class="hljs-keyword">var</span> onClick = <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">()</span></span>{ alert(<span class="hljs-string">"さわんな！"</span>); };
myCircle.click( onClick );

<span class="hljs-comment">/**
 * unclick() で登録解除
 */</span>
myCircle.unclick( onClick ); <span class="hljs-comment">// もうさわっても怒られません。</span>
</code></span></pre>


<h2 class="wp-block-heading">イベントの色々</h2>



<p>clickの他にも様々なマウスイベント用のメソッドが用意されています。</p>



<h3 class="wp-block-heading">おなじみのイベント</h3>



<p>まず、これらのおなじみの方々。<br />
恐らく名前を見るだけで、どんな役割なのかすぐに分かることでしょう。</p>



<ul class="wp-block-list">
<li>click （クリック）</li>



<li>dblclick （ダブルクリック）</li>



<li>mousedown （マウスダウン）</li>



<li>mousemove （マウスムーブ）</li>



<li>mosueout （マウスアウト）</li>



<li>mouseover （マウスオーバー）</li>



<li>mouseup （マウスアップ）</li>
</ul>



<h3 class="wp-block-heading">タッチ関係のイベント</h3>



<p>スマートフォン向けの、タッチイベントも実装されています。</p>



<ul class="wp-block-list">
<li>touchcancel （タッチキャンセル）</li>



<li>touchend （タッチエンド）</li>



<li>touchmove （タッチムーブ）</li>



<li>touchstart （タッチスタート）</li>
</ul>



<h2 class="wp-block-heading">jQueryのような、hover()</h2>



<p>jQuery.hover() は、マウスが入ってきた時と離れていく時のハンドラを<br />
同時に設定する事が出来る便利なメソッドですが、<br />
それとほぼ同じ役割をし、名前も同じ hover() メソッドが用意されています。</p>



<dl>
<dt>Element.hover( f_in, f_out );</dt>
<dd><em>f_in</em> (Function) マウスが入ってきた時の処理<br />
<em>f_out</em> (Function) マウスが離れていく時の処理</dd>
</dl>



<pre class="wp-block-preformatted">/**
 * マウスオーバーで塗り色を変えるサンプル。
 */
myCircle.hover(
    function(){
        console.log( "くんな！" );
        this.attr( "fill", "#c00" );
    },
    function(){
        console.log( "にげんな！" );
        this.attr( "fill", "#345" );
    }
);
</pre>



<h2 class="wp-block-heading">drag() で要素のドラッグを実装する</h2>



<p>Element.drag() を使う事で、要素のドラッグに必要な<br />
マウスダウン時、マウスムーブ時、マウスアップ時のイベントをまとめて設定できます。<br />
ただし、ActionScriptのstartDrag()のように要素の移動まで面倒みてくれるわけではないので、<br />
各イベントハンドラにそれらを実装してあげる必要があります。</p>



<h3 class="wp-block-heading">Element.drag()</h3>



<dl>
<dt>Element.drag( onmove, onstart, onend );</dt>
<dd><em>onmove</em> (Function) マウスムーブ時の処理<br />
<em>onstart</em> (Function) ドラッグ開始時の処理（マウスダウン）<br />
<em>onend</em> (Function) ドラッグ終了時の処理（マウスアップ）</dd>
</dl>



<p>これらのコールバックは全て渡される引数が違うので注意が必要です。<br />
特におさえておくべきは、第一引数のonmoveです。</p>



<h3 class="wp-block-heading">onmove</h3>



<dl>
<dt>onmove : function( dx, dy, x, y, event )</dt>
<dd><em>dx</em> : ドラッグ開始位置からの相対的座標（x）<br />
<em>dy</em> : ドラッグ開始位置からの相対的座標（y）<br />
<em>x</em> : 現在のx座標<br />
<em>y</em> : 現在のy座標<br />
<em>event</em> : イベントオブジェクト</dd>
</dl>



<p>わざわざ相対的座標を渡しているのは、<br />
マウス座標をそのまま要素のx,y座標に代入してしまうと<br />
予想と違う位置に要素が移動してしまう為。<br />
どの部分をクリックしてドラッグしても、<br />
要素はマウスの右下にぶらさがる形になってしまいますね。</p>



<p>つまり、こんなかんじになるでしょう。</p>



<ol class="wp-block-list">
<li>onstartでドラッグ前の要素の座標を記録しておく</li>



<li>onmoveで、1.で記録した座標と相対的座標をあわせて計算</li>
</ol>



<pre class="wp-block-preformatted">(function(){
    var paper, myRect;

    paper = new Raphael( "paper", 640, 480 );
    myRect = paper.rect( 100, 100, 32, 32 )
        .attr( { fill : "#345", stroke : "none" } );

    myRect.drag(
        /**
         * マウスムーブ時の処理
         */
        function( dx, dy, x, y, e ){
            /**
             * Element.data() で初期の座標を取り出して
             * dx, dyを加算して移動
             */
            this.attr({
                x : this.data("x") + dx,
                y : this.data("y") + dy
            });
        },
        /**
         * ドラッグ開始時の処理
         */
        function( x, y, e ){
            /**
             * 要素の座標をElement.data()で記録
             */
            this.data( "x", this.attr("x") );
            this.data( "y", this.attr("y") );
            this.attr( "fill", "#c00" );
        },
        /**
         * ドラッグ終了時の処理
         */
        function( e ){
            this.attr( "fill", "#345" );
        }
    );
})();
</pre>



<h3 class="wp-block-heading">jQueryのようなdata()が便利</h3>



<p>RaphaelのElementオブジェクトには<br />
jQuery.data() と似たような機能が同名のメソッドで実装されていて、<br />
上記のコールバック内で使われているように<br />
情報を保持しておくのに便利です。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-comment">// 値の設定</span>
myElement.data( <span class="hljs-string">"foo"</span>, <span class="hljs-string">"bar"</span> );
<span class="hljs-comment">// 値の取得</span>
<span class="hljs-built_in">console</span>.log( my.Element.data( <span class="hljs-string">"foo"</span> ) ); <span class="hljs-comment">// =&gt; bar</span>
</code></span></pre>


<h2 class="wp-block-heading">デモ</h2>



<p>デモをこちらにまとめました。</p>



<p>» <a href="http://jsfiddle.net/mach3ss/UJE3N/1/">はじめてのRaphael(2) : イベント編 via jsFiddle</a></p>



<p><iframe style="width: 100%; height: 300px" src="http://jsfiddle.net/mach3ss/UJE3N/1/embedded/" allowfullscreen="allowfullscreen" frameborder="0"></iframe></p>



<h2 class="wp-block-heading">まとめ</h2>



<p>Raphaelは、意外とjQueryのメソッドと共通点があり、<br />
導入にあまり苦労しなさそうで助かります。<br />
描画とイベントが操れれば、簡単なRUIを実現できてしまいますね。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>はじめてのRaphael (1) : お絵かき編</title>
		<link>https://blog.mach3.jp/2011/12/06/get-started-with-raphael-01.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 06 Dec 2011 07:41:40 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Raphael]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[XML]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2140</guid>

					<description><![CDATA[SVGが少しずつ市民権を獲得し始めている昨今のWWWですが、 Raphaelとは、そのSVGをコントロールするのに非常に便利なライブラリです。 公式によさげなチュートリアルがなかったのもあり、 今回はその使い方をまとめて [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>SVGが少しずつ市民権を獲得し始めている昨今のWWWですが、<br />
Raphaelとは、そのSVGをコントロールするのに非常に便利なライブラリです。<br />
公式によさげなチュートリアルがなかったのもあり、<br />
今回はその使い方をまとめてみようという試み。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/-Dz76C91TtBw/Tt3G7jLx-eI/AAAAAAAABag/mLOuNHHj_8g/s400/201112061638.png" alt="はじめてのRaphael (1) : お絵かき編"/></figure>



<p></p>



<span id="more-2140"></span>



<h2 class="wp-block-heading">Raphaelとは</h2>



<p>RaphaelはSVGで図を描画するためのフレームワークです。<br />
正しくは「Raphaël」と書きますが、<br />
毎度めんどくさいのでRaphaelでいきます。</p>



<h3 class="wp-block-heading">なにをしてくれるのか</h3>



<ul class="wp-block-list">
<li>SVGが動かないクラシックなIE環境の為に、VMLでも出力してくれます。</li>



<li>イベントやアニメーションまわりも簡単に実装できるようになっています。</li>
</ul>



<p>特に助かるのがVML対応。<br />
旧ブラウザをサポートしなければならないケースには、<br />
ぜひとも導入したいライブラリですね。</p>



<h2 class="wp-block-heading">極めてシンプルな例</h2>



<p>Rraphaelで図を描画する手順は、ざっくりとこんな感じ。</p>



<ol class="wp-block-list">
<li>まず紙（paper）を用意する</li>



<li>その紙に図を描く。<br /><br />矩形（rect）や円形（circle）等、基本となるシンプルな図形はステンシルが用意されています。<br /><br />そうでない物は、フリーハンド（path）で描く事ができます。</li>



<li>描かれた図に、色や線種等のスタイルを設定します。</li>
</ol>



<h3 class="wp-block-heading">HTML</h3>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"my-paper-0"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></span></pre>


<h3 class="wp-block-heading">JavaScript</h3>


<pre class="wp-block-code"><span><code class="hljs language-php">(<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">()</span></span>{
    <span class="hljs-comment">/**
    * &#91;1] Raphael()でキャンバス（paper）をつくる
    */</span>
    <span class="hljs-keyword">var</span> paper = Raphael( <span class="hljs-string">"my-paper-0"</span>, <span class="hljs-number">64</span>, <span class="hljs-number">64</span> );
    <span class="hljs-comment">/**
    * &#91;2] circle()で円を描画し、
    * &#91;3] attr()で属性を設定する
    */</span>
    paper.circle( <span class="hljs-number">32</span>, <span class="hljs-number">32</span>, <span class="hljs-number">24</span> )
       .attr( { fill : <span class="hljs-string">"#345"</span>, stroke : <span class="hljs-string">"none"</span> } );
})();
</code></span></pre>


<p>Raphael() は、Paperというオブジェクトを返します。<br />
図の描画は、そのPaperオブジェクトが持つメソッドを通して行う事になります。</p>



<h2 class="wp-block-heading">基本図形を描いてみる</h2>



<p>矩形（rect）、円形（circle）、楕円形（ellipse）等の基本図形は、<br />
Paperのメソッドを使って簡単に描画する事ができます。</p>



<h3 class="wp-block-heading">円形</h3>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-comment">/**
 * Paper.circle( x, y, radius );
 */</span>
<span class="hljs-selector-tag">paper</span><span class="hljs-selector-class">.circle</span>( 32, 32, 24 );
</code></span></pre>


<h3 class="wp-block-heading">矩形</h3>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">/**
 * Paper.rect( x, y, width, height, radius );
 */</span>
paper.rect( <span class="hljs-number">8</span>, <span class="hljs-number">8</span>, <span class="hljs-number">48</span>, <span class="hljs-number">48</span> ); <span class="hljs-comment">// 普通の矩形</span>
paper.rect( <span class="hljs-number">8</span>, <span class="hljs-number">8</span>, <span class="hljs-number">48</span>, <span class="hljs-number">48</span>, <span class="hljs-number">8</span> ); <span class="hljs-comment">// 半径8の角丸矩形</span>
</code></span></pre>


<h3 class="wp-block-heading">楕円形</h3>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-comment">/**
 * Paper.ellipse( x, y, horizontalRadius, virticalRadius );
 */</span>
<span class="hljs-selector-tag">paper</span><span class="hljs-selector-class">.ellipse</span>( 32, 32, 16, 24 );
</code></span></pre>


<h2 class="wp-block-heading">Pathで自由に描いてみる</h2>



<p>イラレ等の「ペンツール」のような感じで自由に図を描く事ができるのが、<br />
Paper.path()メソッドです。 まずはシンプルな三角形で例を示してみましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-comment">/**
 * Paper.path( pathString );
 */</span>
<span class="hljs-selector-tag">paper</span><span class="hljs-selector-class">.path</span>( "<span class="hljs-selector-tag">M32</span>,8<span class="hljs-selector-tag">L56</span>,56<span class="hljs-selector-tag">H8L32</span>,8<span class="hljs-selector-tag">Z</span>" );
</code></span></pre>


<p>path() の引数には、SVGで定義されているPath要素のコマンドを渡します。<br />
文法は非常にシンプルで、アルファベット一文字で表されるコマンド毎に切り分けられます。<br />
上記コードのコマンドを分解してみると…</p>



<ol class="wp-block-list">
<li><em>&#8220;M32,8&#8221;</em> : 32,8に移動する（MoveTo）</li>



<li><em>&#8220;L56,56&#8221;</em> : 現在地から56,56まで線を描画する（LineTo）</li>



<li><em>&#8220;H8&#8221;</em> : x座標8まで水平線を描画する（HorizontalLineTo）</li>



<li><em>&#8220;L32,8&#8221;</em> : 32,8まで線を描画する（LineTo）</li>



<li><em>&#8220;Z&#8221;</em> : パスを閉じる</li>
</ol>



<p>これらを一気に書いて表した感じですね。</p>



<h3 class="wp-block-heading">コマンド（抜粋）</h3>



<dl>
<dt>M (MoveTo)</dt>
<dd>座標（x,y）に移動します</dd>
<dt>L (LineTo)</dt>
<dd>座標（x,y）まで線を描画します</dd>
<dt>H (HorizontalLineTo)</dt>
<dd>座標（x）まで水平線を描画します</dd>
<dt>V（VirticalLineTo)</dt>
<dd>座標（y）まで垂直線を描画します</dd>
<dt>C (CurveTo)</dt>
<dd>複数の座標をコントロールポイントとして引数に受け取り、ベジェ曲線を描画します。</dd>
</dl>



<p>コマンドを大文字で表記すると、座標を絶対位置として扱い、<br />
小文字で表記すると現在地からの相対位置とします。</p>



<p>それぞれのコマンドについては公式ドキュメントか、SVGの仕様書を参考にしましょう。</p>



<ul class="wp-block-list">
<li><a href="http://www.w3.org/TR/SVG/paths.html">Paths – SVG 1.1 (Second Edition)</a></li>



<li><a href="http://raphaeljs.com/reference.html#Paper.path">Raphaël Reference</a></li>
</ul>



<h3 class="wp-block-heading">もう少し複雑な例</h3>



<p>三角形よりももうすこし複雑な例として、<br />
Pathを使って矢印を描画してみます。</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-tag">paper</span><span class="hljs-selector-class">.path</span>( "<span class="hljs-selector-tag">M32</span>,8<span class="hljs-selector-tag">L56</span>,32<span class="hljs-selector-tag">L48</span>,40<span class="hljs-selector-tag">L40</span>,32<span class="hljs-selector-tag">V56H24V32L16</span>,40<span class="hljs-selector-tag">L8</span>,32<span class="hljs-selector-tag">L32</span>,8<span class="hljs-selector-tag">Z</span>" )
    <span class="hljs-selector-class">.attr</span>( { <span class="hljs-attribute">fill </span>: <span class="hljs-string">"#345"</span>, stroke : <span class="hljs-string">"none"</span> } );
</code></span></pre>


<h2 class="wp-block-heading">デモ</h2>



<p>デモをこちらにまとめました。<br />
ご参考までに。</p>



<ul class="wp-block-list">
<li><a href="http://jsfiddle.net/mach3ss/bkXNb/1/">はじめてのRaphael (1) : お絵かき編 via jsFiddle</a></li>
</ul>



<p><iframe style="width: 100%; height: 300px" src="http://jsfiddle.net/mach3ss/bkXNb/1/embedded/" allowfullscreen="allowfullscreen" frameborder="0"></iframe></p>



<h2 class="wp-block-heading">まとめ</h2>



<p>図形を描くのに色々メソッドやコマンドを覚えたりしなければいけませんが、<br />
恐らくSVGを直に書く際にも役に立つ知識なので、無駄にはならないと思います。</p>



<p>さらに複雑なものを描かなければならない時は、<br />
他の楽な方法がありますが、それはまた別の記事で。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>実験室: gRaphaëlでインタラクティブなグラフを描いてみる</title>
		<link>https://blog.mach3.jp/2010/07/13/graphael.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 13 Jul 2010 18:14:00 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Chart]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Graph]]></category>
		<category><![CDATA[gRaphael]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Raphael]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/07/13/%e5%ae%9f%e9%a8%93%e5%ae%a4-graphael%e3%81%a7%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%a9%e3%82%af%e3%83%86%e3%82%a3%e3%83%96%e3%81%aa%e3%82%b0%e3%83%a9%e3%83%95%e3%82%92%e6%8f%8f%e3%81%84%e3%81%a6%e3%81%bf.html</guid>

					<description><![CDATA[Raphaëlは、Webページでベクターグラフィックを簡単に扱う為のJavaScriptライブラリです。 それを拡張する為の、gRaphaëlというグラフ描画プラグインが公開されています。 今回はgRaphaëlを使って [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="http://raphaeljs.com/index.html">Raphaël</a>は、Webページでベクターグラフィックを簡単に扱う為のJavaScriptライブラリです。<br />
それを拡張する為の、<a href="http://g.raphaeljs.com/">gRaphaël</a>というグラフ描画プラグインが公開されています。<br />
今回はgRaphaëlを使ってインタラクティブなグラフを描いてみました。<br />
（以下、Raphaelと表記します）</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/TDwr1qEithI/AAAAAAAAA-Q/6t9diGuL98g/s800/201007131656.png" alt="gRaphaël"/></figure>



<p></p>



<span id="more-2244"></span>



<h2 class="wp-block-heading">デモ</h2>



<figure class="wp-block-image"><a href="http://jsfiddle.net/mach3ss/y7mb6/embedded/result/"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TDwr1tFUG6I/AAAAAAAAA-U/HcU6lC48Cto/s800/201007131802.png" alt="デモページへ"/></a></figure>



<p></p>



<p><a href="http://jsfiddle.net/mach3ss/y7mb6/embedded/result/">デモページ</a></p>



<p>円グラフ上をマウスオーバーするとグラフと凡例がアニメーションし、<br />
連動してツールチップが表示されます。<br />
普通に描いたら相当に面倒そうですが、<br />
Raphaelのお陰でかなり短いスクリプトで済んでいます。素晴らしい！</p>



<p>デモのソースを見て頂くのが一番手っ取り早いですが、<br />
要点だけ簡単に掻い摘んでみます。</p>



<h2 class="wp-block-heading">ライブラリのロード</h2>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/javascript"</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"raphael.js"</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">"utf-8"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/javascript"</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"g.raphael.js"</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">"utf-8"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/javascript"</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"g.pie.js"</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">"utf-8"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>使用するライブラリは、まずは<em>raphael.js</em>本体。<br />
それからグラフ描画プラグインの、<em>g.raphael.js</em>と、<br />
描きたいグラフのJSファイル（この場合は円グラフ用の<em>g.pie.js</em>）を読み込みます。<br />
それぞれ、公式からダウンロードします。</p>



<ul class="wp-block-list">
<li>Raphael公式 : <a href="http://raphaeljs.com/index.html">Raphaël—JavaScript Library</a></li>



<li>gRaphael公式 : <a href="http://g.raphaeljs.com/">gRaphaël—Charting JavaScript Library</a></li>
</ul>



<h2 class="wp-block-heading">Raphaelオブジェクトを生成する</h2>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> r = Raphael(<span class="hljs-string">"holder"</span>,<span class="hljs-number">640</span>,<span class="hljs-number">480</span>);
</code></span></pre>


<p>Raphaelを使用するにあたって必ず必要になる処理です。<br />
第一引数の&#8221;holder&#8221;は、描画されるベクターオブジェクトを格納するエレメントのIDを入れましょう。<br />
第二・第三引数はお察しの通り、width/heightです。<br />
勿論、格納する為のエレメントは先に用意されている必要があります。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"holder"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></span></pre>


<h2 class="wp-block-heading">Raphaelオブジェクトに円グラフを追加する</h2>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> pie = r.g.piechart( <span class="hljs-number">320</span>, <span class="hljs-number">240</span>, <span class="hljs-number">150</span>, values, { <span class="hljs-attr">legend</span>:legends });
</code></span></pre>


<p>第一・第二引数は中心点の座標、第三引数は半径です。<br />
valuesにはグラフの元になる値を配列にして渡します。<br />
legendsには凡例に使うテキストを、これまた配列にして渡してあげましょう。</p>



<h2 class="wp-block-heading">マウスオーバー/アウト時のエフェクトを追加する</h2>


<pre class="wp-block-code"><span><code class="hljs language-javascript">pie.hover( <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-comment">// マウスオーバー時のエフェクト</span>
}, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-comment">// マウスアウト時のエフェクト</span>
} );
</code></span></pre>


<p>第一・第二引数は共にfunctionを受け取り、それぞれがマウスオーバー時/アウト時に呼ばれます。</p>



<p>尚、gRaphaelについては2010年7月13日現在、ドキュメントがまだ整備されていません。<br />
ですので、実際にどのように書けば良いのかは<a href="http://g.raphaeljs.com/">公式のデモ</a>のソースを読んで<br />
使ってみたい効果を拾って試行錯誤するしかありません。<br />
「遅くなってごめんね！がんばってるからね！」と書いてあるので期待しましょう。</p>



<p>書き方次第で様々な効果が得られそうなので、なかなか面白いライブラリです。<br />
統計画面等をgRaphaelで綺麗に作ったら喜んでもらえるかもしれませんね。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
