<?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>Snap.svg &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/snap-svg/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>
	</channel>
</rss>
