<?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>Serendip &#187; javascript</title>
	<atom:link href="http://www.serendip.ws/archives/tag/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://www.serendip.ws</link>
	<description>Webデザイン・プログラミング</description>
	<lastBuildDate>Fri, 10 Feb 2012 05:33:58 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>jQuery, DOM の操作メソッドの挙動の違いについて</title>
		<link>http://www.serendip.ws/archives/5087</link>
		<comments>http://www.serendip.ws/archives/5087#comments</comments>
		<pubDate>Sun, 29 Aug 2010 12:16:51 +0000</pubDate>
		<dc:creator>iNo</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.serendip.ws/?p=5087</guid>
		<description><![CDATA[jQuery の DOM 操作メソッドの挙動の違いについてのまとめ。 以下の例の DOM 要素に対して、jQuery の DOM 操作メソッドを使って処理を行い、その挙動の違いについて調べてみた。 &#60;div id= [...]]]></description>
			<content:encoded><![CDATA[<p>jQuery の DOM 操作メソッドの挙動の違いについてのまとめ。</p>
<p>以下の例の DOM 要素に対して、jQuery の DOM 操作メソッドを使って処理を行い、その挙動の違いについて調べてみた。</p>
<pre><span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;box&quot;</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">&quot;box&quot;</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト1<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト2<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト3<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト4<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
</pre>
<h3><code>append</code>, <code>appendTo</code>, <code>prepend</code>, <code>prependTo</code> について</h3>
<h4><code>append</code></h4>
<dl class="entry-list-style">
<dt><code>append</code></dt>
<dd>指定した要素の最後に、引数で指定した内容を追加する。</dd>
</dl>
<pre><span class="Special">$</span>(<span class="Constant">'#box'</span>)<span class="Special">.append</span>(<span class="Constant">'&lt;div&gt;&lt;em&gt;サンプルテキスト5（追加）&lt;/em&gt;&lt;/div&gt;'</span>)<span class="Special">;</span>
</pre>
<p>実行結果</p>
<pre><span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;box&quot;</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト1<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト2<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト3<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト4<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;</span><span class="Statement">em</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト5（追加）</span><span class="Identifier">&lt;/</span><span class="Statement">em</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
</pre>
<h4><code>appendTo</code></h4>
<dl class="entry-list-style">
<dt><code>appendTo</code></dt>
<dd>指定した内容を、引数で指定した要素の最後に追加する。</dd>
</dl>
<pre><span class="Special">$</span>(<span class="Constant">'&lt;div&gt;&lt;em&gt;サンプルテキスト5（追加）&lt;/em&gt;&lt;/div&gt;'</span>)<span class="Special">.appendTo</span>(<span class="Constant">'#box'</span>)<span class="Special">;</span>
</pre>
<p>実行結果</p>
<pre><span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;box&quot;</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト1<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト2<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト3<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト4<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;</span><span class="Statement">em</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト5（追加）</span><span class="Identifier">&lt;/</span><span class="Statement">em</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
</pre>
<h4><code>prepend</code></h4>
<dl class="entry-list-style">
<dt><code>prepend</code></dt>
<dd>指定した要素の最初に、引数で指定した内容を追加する。</dd>
</dl>
<pre><span class="Special">$</span>(<span class="Constant">'#box'</span>)<span class="Special">.prepend</span>(<span class="Constant">'&lt;div&gt;&lt;em&gt;サンプルテキスト5（追加）&lt;/em&gt;&lt;/div&gt;'</span>)<span class="Special">;</span>
</pre>
<p>実行結果</p>
<pre><span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;box&quot;</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;</span><span class="Statement">em</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト5（追加）</span><span class="Identifier">&lt;/</span><span class="Statement">em</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト1<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト2<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト3<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト4<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
</pre>
<h4><code>prependTo</code></h4>
<dl class="entry-list-style">
<dt><code>prependTo</code></dt>
<dd>指定した内容を、引数で指定した要素の最初に追加する。</dd>
</dl>
<pre><span class="Special">$</span>(<span class="Constant">'&lt;div&gt;&lt;em&gt;サンプルテキスト5（追加）&lt;/em&gt;&lt;/div&gt;'</span>)<span class="Special">.prependTo</span>(<span class="Constant">'#box'</span>)<span class="Special">;</span>
</pre>
<p>実行結果</p>
<pre><span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;box&quot;</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;</span><span class="Statement">em</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト5（追加）</span><span class="Identifier">&lt;/</span><span class="Statement">em</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト1<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト2<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト3<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト4<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
</pre>
<h3><code>after</code>, <code>insertAfter</code>, <code>before</code>, <code>insertBefore</code> について</h3>
<h4><code>after</code></h4>
<dl class="entry-list-style">
<dt><code>after</code></dt>
<dd>指定した要素の後ろに、引数で指定した内容を追加する。</dd>
</dl>
<pre><span class="Special">$</span>(<span class="Constant">'#box'</span>)<span class="Special">.after</span>(<span class="Constant">'&lt;div&gt;&lt;em&gt;サンプルテキスト5（追加）&lt;/em&gt;&lt;/div&gt;'</span>)<span class="Special">;</span>
</pre>
<p>実行結果</p>
<pre><span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;box&quot;</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト1<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト2<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト3<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト4<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
<span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;</span><span class="Statement">em</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト5（追加）</span><span class="Identifier">&lt;/</span><span class="Statement">em</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
</pre>
<h4><code>insertAfter</code></h4>
<dl class="entry-list-style">
<dt><code>insertAfter</code></dt>
<dd>指定した内容を、引数で指定した要素の後ろに追加する。</dd>
</dl>
<pre><span class="Special">$</span>(<span class="Constant">'&lt;div&gt;&lt;em&gt;サンプルテキスト5（追加）&lt;/em&gt;&lt;/div&gt;'</span>)<span class="Special">.insertAfter</span>(<span class="Constant">'#box'</span>)<span class="Special">;</span>
</pre>
<p>実行結果</p>
<pre><span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;box&quot;</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト1<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト2<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト3<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト4<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
<span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;</span><span class="Statement">em</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト5（追加）</span><span class="Identifier">&lt;/</span><span class="Statement">em</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
</pre>
<h4><code>before</code></h4>
<dl class="entry-list-style">
<dt><code>before</code></dt>
<dd>指定した要素の前に、引数で指定した内容を追加する。</dd>
</dl>
<pre><span class="Special">$</span>(<span class="Constant">'#box'</span>)<span class="Special">.before</span>(<span class="Constant">'&lt;div&gt;&lt;em&gt;サンプルテキスト5（追加）&lt;/em&gt;&lt;/div&gt;'</span>)<span class="Special">;</span>
</pre>
<p>実行結果</p>
<pre><span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;</span><span class="Statement">em</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト5（追加）</span><span class="Identifier">&lt;/</span><span class="Statement">em</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
<span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;box&quot;</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト1<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト2<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト3<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト4<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
</pre>
<h4><code>insertBefore</code></h4>
<dl class="entry-list-style">
<dt><code>insertBefore</code></dt>
<dd>指定した内容を、引数で指定した要素の前に追加する。</dd>
</dl>
<pre><span class="Special">$</span>(<span class="Constant">'&lt;div&gt;&lt;em&gt;サンプルテキスト5（追加）&lt;/em&gt;&lt;/div&gt;'</span>)<span class="Special">.insertBefore</span>(<span class="Constant">'#box'</span>)<span class="Special">;</span>
</pre>
<p>実行結果</p>
<pre><span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;</span><span class="Statement">em</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト5（追加）</span><span class="Identifier">&lt;/</span><span class="Statement">em</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
<span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;box&quot;</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト1<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト2<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト3<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>サンプルテキスト4<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
</pre>
<h3><code>wrap</code>, <code>wrapAll</code>, <code>wrapInner</code> について</h3>
<h4><code>wrap</code></h4>
<dl class="entry-list-style">
<dt><code>wrap</code></dt>
<dd>指定した要素を、引数に指定した内容で囲む。<br />
    指定した要素が複数の場合は各要素が個別に囲まれる。</dd>
</dl>
<pre><span class="Special">$</span>(<span class="Constant">'#box div'</span>)<span class="Special">.wrap</span>(<span class="Constant">'&lt;div&gt;&lt;em&gt;サンプルテキスト5（追加）&lt;/em&gt;&lt;/div&gt;'</span>)<span class="Special">;</span>
</pre>
<p>実行結果</p>
<pre><span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;box&quot;</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;</span><span class="Statement">em</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト5（追加）</span><span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト1</span><span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">em</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;</span><span class="Statement">em</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト5（追加）</span><span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト2</span><span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">em</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;</span><span class="Statement">em</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト5（追加）</span><span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト3</span><span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">em</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;</span><span class="Statement">em</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト5（追加）</span><span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト4</span><span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">em</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
</pre>
<h4><code>wrapAll</code></h4>
<dl class="entry-list-style">
<dt><code>wrapAll</code></dt>
<dd>指定した要素を、引数に指定した内容で囲む。<br />
    指定した要素が複数の場合は各要素をひとまとめにして囲まれる。</dd>
</dl>
<pre><span class="Special">$</span>(<span class="Constant">'#box div'</span>)<span class="Special">.wrapAll</span>(<span class="Constant">'&lt;div&gt;&lt;em&gt;サンプルテキスト5（追加）&lt;/em&gt;&lt;/div&gt;'</span>)<span class="Special">;</span>
</pre>
<p>実行結果</p>
<pre><span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;box&quot;</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
        <span class="Identifier">&lt;</span><span class="Statement">em</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト5（追加）</span>
<span class="htmlItalic">            </span><span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト1</span><span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
<span class="htmlItalic">            </span><span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト2</span><span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
<span class="htmlItalic">            </span><span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト3</span><span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
<span class="htmlItalic">            </span><span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト4</span><span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
<span class="htmlItalic">        </span><span class="Identifier">&lt;/</span><span class="Statement">em</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
</pre>
<h4><code>wrapInner</code></h4>
<dl class="entry-list-style">
<dt><code>wrapInner</code></dt>
<dd>指定した要素の子要素を、引数で指定した内容で囲む。<br />
    指定した要素が複数の場合は各要素が個別に囲まれる。</dd>
</dl>
<pre><span class="Special">$</span>(<span class="Constant">'#box div'</span>)<span class="Special">.wrapInner</span>(<span class="Constant">'&lt;div&gt;&lt;em&gt;サンプルテキスト5（追加）&lt;/em&gt;&lt;/div&gt;'</span>)<span class="Special">;</span>
</pre>
<p>実行結果</p>
<pre><span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;box&quot;</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;</span><span class="Statement">em</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト5（追加）サンプルテキスト1</span><span class="Identifier">&lt;/</span><span class="Statement">em</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;</span><span class="Statement">em</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト5（追加）サンプルテキスト2</span><span class="Identifier">&lt;/</span><span class="Statement">em</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;</span><span class="Statement">em</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト5（追加）サンプルテキスト3</span><span class="Identifier">&lt;/</span><span class="Statement">em</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;</span><span class="Statement">em</span><span class="Identifier">&gt;</span><span class="htmlItalic">サンプルテキスト5（追加）サンプルテキスト4</span><span class="Identifier">&lt;/</span><span class="Statement">em</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
<span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
</pre>
<h3>デモページ</h3>
<p><a href="http://sandbox.serendip.ws/jquery_dom_operation_example.html">jQuery, DOM の操作メソッドの挙動の違いについて デモ</a></h3>
<hr />
<div class="amazlet-box" style="margin-bottom:0px;font-size:9pt;">
<div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873114683/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41pSJplJGGL._SL160_.jpg" alt="jQueryクックブック" style="border: none;" /></a></div>
<div class="amazlet-info" style="line-height:120%; margin-bottom: 10px;margin-top:10px;">
<div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873114683/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank">jQueryクックブック</a>
<div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4873114683/serendip7822-22/ref=nosim/" title="jQueryクックブック" target="_blank">amazlet</a> at 10.08.29</div>
</div>
<div class="amazlet-detail">jQuery Community Experts <br />オライリージャパン <br />売り上げランキング: 1476</div>
<div class="amazlet-sub-info" style="float: left;">
<div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873114683/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer" style="clear: left"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.serendip.ws/archives/5087/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ツールチップをスライドアップして表示する jQuery plugin slideupTooltip</title>
		<link>http://www.serendip.ws/archives/4837</link>
		<comments>http://www.serendip.ws/archives/4837#comments</comments>
		<pubDate>Tue, 25 May 2010 14:06:23 +0000</pubDate>
		<dc:creator>iNo</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.serendip.ws/?p=4837</guid>
		<description><![CDATA[指定した HTML の要素にマウスホバーすると、隣接するツールチップのレイヤー要素をスライドアップして表示することができる jQuery plugin を作った。 &#60;p&#62;mouse over &#60;span [...]]]></description>
			<content:encoded><![CDATA[<p>指定した HTML の要素にマウスホバーすると、隣接するツールチップのレイヤー要素をスライドアップして表示することができる jQuery plugin を作った。</p>
<p><img src="http://www.serendip.ws/wordpress/wp-content/uploads/jquery_plugin_slideuptooltip_ss_001.png" alt="jQuery plugin slideupTooltip Screenshot" title="jQuery plugin slideupTooltip Screenshot" width="538" height="394" class="size-full wp-image-4836" /></p>
<pre><span class="Identifier">&lt;</span><span class="Statement">p</span><span class="Identifier">&gt;</span>mouse over <span class="Identifier">&lt;</span><span class="Statement">span</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">&quot;note&quot;</span><span class="Identifier">&gt;</span>me!<span class="Identifier">&lt;/</span><span class="Statement">span</span><span class="Identifier">&gt;</span><span class="Identifier">&lt;</span><span class="Statement">span</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">&quot;tooltip0&quot;</span><span class="Identifier">&gt;</span>hello, world!<span class="Identifier">&lt;/</span><span class="Statement">span</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">p</span><span class="Identifier">&gt;</span>
</pre>
<p>上記の HTML でクラス属性が <code>note</code> の要素に、プラグインで <code>slideupTooltip()</code> を実行させると、隣接する要素（上記の HTML ではクラス属性が <code>tooltip0</code> の <code>span</code> 要素）がスライドアップ効果とともに現われる。</p>
<p>JavaScript 部分のコードは以下のような感じ。</p>
<pre><span class="Special">$</span>(<span class="Identifier">function</span>()<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">    $</span>(<span class="Constant">'.note'</span>)<span class="Special">.slideupTooltip</span>(<span class="Identifier">{</span>
<span class="Special">        opacity : </span>0<span class="Special">.</span>8<span class="Special">,</span>
<span class="Special">        speed : </span><span class="Constant">'fast'</span><span class="Special">,</span>
<span class="Special">        </span><span class="Statement">top</span><span class="Special"> : </span>35<span class="Special">,</span>
<span class="Special">        left: </span>-30<span class="Special">,</span>
<span class="Special">        className : </span><span class="Constant">'tooltip'</span>
<span class="Special">    </span><span class="Identifier">}</span>)<span class="Special">;</span>
<span class="Identifier">}</span>)<span class="Special">;</span>
</pre>
<p>JavaScript が無効の環境の場合は、HTML で指定したクラス名にスタイルを指定して表示させ、JavaScript が有効な環境には <code>className</code> パラメータで渡すクラス名にスタイルを設定してスタイルの上書きをすると、JavaScript 無効時でもツールチップの内容を確認できる。</p>
<h3>設定項目</h3>
<p>以下の各項目を設定することがきる。</p>
<p>設定をおこなわなかった場合は default 値が設定される。</p>
<table class="entry-table-style">
<tr>
<th>設定項目</th>
<th>内容</th>
<th>設定値</th>
<th>default値</th>
</tr>
<tr>
<td><var>opacity</var></td>
<td>要素の透明度</td>
<td>数値</td>
<td><code>1.0</code></td>
</tr>
<tr>
<td><var>left</var></td>
<td>ツールチップ表示位置<br />（水平方向）</td>
<td>数値</td>
<td><code>0</code></td>
</tr>
<tr>
<td><var>top</var></td>
<td>ツールチップ表示位置<br />（垂直方向）</td>
<td>数値</td>
<td><code>0</code></td>
</tr>
<tr>
<td><var>speed</var></td>
<td>スライド速度</td>
<td>次の文字列のいずれか<br />&quot;fast&quot;, &quot;normal&quot;, &quot;slow&quot;</td>
<td><code>&quot;normal&quot;</code></td>
</tr>
<tr>
<td><var>className</var></td>
<td>ツールチップ要素のクラス名</td>
<td>任意の文字列</td>
<td><code>null</code></td>
</tr>
</table>
<h3>デモ</h3>
<p>デモページ：<a href="http://sandbox.serendip.ws/javascript_jquery_slideuptooltip.html" class="out" rel="external">jQuery plugin slideupTooltip</a></p>
<p>デモ動画</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/0tNkAjj76K0&#038;hl=ja&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/0tNkAjj76K0&#038;hl=ja&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<h3>ダウンロード</h3>
<p>プラグインのダウンロードは次のリンクから。<br />
<a href="/resource/jquery.slideuptooltip.js">jquery.slideuptooltip.js</a></p>
<hr />
<div class="amazlet-box" style="margin-bottom:0px;font-size:9pt;">
<div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4861004314/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51wlakt5aHL._SL160_.jpg" alt="Ajaxライブラリリファレンス" style="border: none;" /></a></div>
<div class="amazlet-info" style="float:left;margin-left:15px;margin-top:10px;line-height:120%">
<div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4861004314/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank">Ajaxライブラリリファレンス</a>
<div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4861004314/serendip7822-22/ref=nosim/" title="Ajaxライブラリリファレンス" target="_blank">amazlet</a> at 10.05.25</div>
</div>
<div class="amazlet-detail">古籏 一浩 <br />ビー・エヌ・エヌ新社 <br />売り上げランキング: 211995</div>
<div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4861004314/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div>
</div>
<div class="amazlet-footer" style="clear: left"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.serendip.ws/archives/4837/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>メールアドレスをエンコードするブックマークレット</title>
		<link>http://www.serendip.ws/archives/4828</link>
		<comments>http://www.serendip.ws/archives/4828#comments</comments>
		<pubDate>Sat, 22 May 2010 14:00:44 +0000</pubDate>
		<dc:creator>iNo</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.serendip.ws/?p=4828</guid>
		<description><![CDATA[メールアドレスの文字列をランダムに数値文字参照形式にエンコードするブックマークレット。 Encode Mail Address javascript:(function(){var a=prompt('input you [...]]]></description>
			<content:encoded><![CDATA[<p>メールアドレスの文字列をランダムに数値文字参照形式にエンコードするブックマークレット。</p>
<p><a href="javascript:(function(){var a=prompt('input your mail address','');if(a.length!==0){for(var b='',c=0,d=a.length;c<d;c++)b+=a[c]==='@'?'&#'+'64;':parseInt(Math.random()*2,10)/2===0?'&#'+a.charCodeAt(c)+';':a[c];prompt('encoded mail address',b)}})();">Encode Mail Address</a></p>
<pre>javascript:(function(){var a=prompt('input your mail address','');if(a.length!==0){for(var b='',c=0,d=a.length;c&lt;d;c++)b+=a[c]==='@'?'&amp;#'+'64;':parseInt(Math.random()*2,10)/2===0?'&amp;#'+a.charCodeAt(c)+';':a[c];prompt('encoded mail address',b)}})();
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.serendip.ws/archives/4828/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript, Canvas スキャンライン・シードフィル アルゴリズムによる塗り潰し</title>
		<link>http://www.serendip.ws/archives/4797</link>
		<comments>http://www.serendip.ws/archives/4797#comments</comments>
		<pubDate>Thu, 06 May 2010 11:19:05 +0000</pubDate>
		<dc:creator>iNo</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.serendip.ws/?p=4797</guid>
		<description><![CDATA[HTML5 Canvas でバケツツールによる塗り潰しを実現するために、スキャンライン・シードフィル (Scan Line Seed Fill) というアルゴリズムを使ってみた。 アルゴリズムの詳細については、以下のサイ [...]]]></description>
			<content:encoded><![CDATA[<p>HTML5 Canvas でバケツツールによる塗り潰しを実現するために、スキャンライン・シードフィル (Scan Line Seed Fill) というアルゴリズムを使ってみた。<br />
アルゴリズムの詳細については、以下のサイトを参考にした。</p>
<p>参考：<a href="http://www40.atwiki.jp/spellbound/pages/315.html" class="out" rel="external">ActionScript入門Wiki@rsakane &#8211; 塗りつぶしアルゴリズム(スキャンライン &#8211; シードフィル編)</a><br />
　　　<a href="http://fussy.web.fc2.com/algo/algo3-1.htm" class="out" rel="external">ペイント・ルーチン (1)シード・フィル アルゴリズム</a></p>
<p>単純に言えば、水平方向に塗り潰し可能な範囲を探して塗り潰してゆき、それを塗り潰し可能な範囲が無くなるまで上下方向に繰り返していくといったもの。</p>
<p><a href="http://sandbox.serendip.ws/javascript_canvas_scanline_seedfill.html">JavaScript, Canvas スキャンライン・シードフィル アルゴリズムによる塗り潰しデモ</a></p>
<h3>塗り潰し処理のコード</h3>
<pre><span class="Identifier">var</span> fillColor = <span class="Identifier">function</span>(startX, startY, imgData, penColor, canvas) <span class="Identifier">{</span>
    <span class="Identifier">var</span> cWidth = canvas.width;
    <span class="Identifier">var</span> cHeight = canvas.height;
    <span class="Identifier">var</span> toImageDataPixelPos = <span class="Identifier">function</span>(x, y) <span class="Identifier">{</span> <span class="Statement">return</span> ((cWidth * y) + x) * 4; <span class="Identifier">}</span>;
    <span class="Identifier">var</span> startPixelPos = toImageDataPixelPos(startX, startY);
    <span class="Identifier">var</span> baseColor = <span class="Identifier">{</span> red : imgData.data<span class="Identifier">[</span>startPixelPos<span class="Identifier">]</span>, green : imgData.data<span class="Identifier">[</span>startPixelPos+1<span class="Identifier">]</span>, blue : imgData.data<span class="Identifier">[</span>startPixelPos+2<span class="Identifier">]</span>, alpha : 1 <span class="Identifier">}</span>;

    <span class="Identifier">var</span> setImageDataPixelPos = <span class="Identifier">function</span>(pp, imgD) <span class="Identifier">{</span>
        imgD.data<span class="Identifier">[</span>pp<span class="Identifier">]</span> = penColor.red;
        imgD.data<span class="Identifier">[</span>pp+1<span class="Identifier">]</span> = penColor.green;
        imgD.data<span class="Identifier">[</span>pp+2<span class="Identifier">]</span> = penColor.blue;
        imgD.data<span class="Identifier">[</span>pp+3<span class="Identifier">]</span> = 255 * penColor.alpha;
        <span class="Statement">return</span> imgD;
    <span class="Identifier">}</span>;

    <span class="Identifier">var</span> isMatchColor = <span class="Identifier">function</span>(x, y, imgD, cl) <span class="Identifier">{</span>
        <span class="Identifier">var</span> pp = toImageDataPixelPos(x, y);
        <span class="Statement">if</span> ((imgD.data<span class="Identifier">[</span>pp<span class="Identifier">]</span> === cl.red) &amp;&amp;
            (imgD.data<span class="Identifier">[</span>pp+1<span class="Identifier">]</span> === cl.green) &amp;&amp;
            (imgD.data<span class="Identifier">[</span>pp+2<span class="Identifier">]</span> === cl.blue)) <span class="Identifier">{</span>
            <span class="Statement">return</span> <span class="Constant">true</span>;
        <span class="Identifier">}</span> <span class="Statement">else</span> <span class="Identifier">{</span>
            <span class="Statement">return</span> <span class="Constant">false</span>;
        <span class="Identifier">}</span>
    <span class="Identifier">}</span>;

    <span class="Identifier">var</span> paintHorizontal = <span class="Identifier">function</span>(leftX, rightX, y, imgD) <span class="Identifier">{</span>
        <span class="Statement">for</span> (<span class="Identifier">var</span> x = leftX; x &lt;= rightX; x++) <span class="Identifier">{</span>
            <span class="Identifier">var</span> pp = toImageDataPixelPos(x, y);
            imgD = setImageDataPixelPos(pp, imgD);
        <span class="Identifier">}</span>
        <span class="Statement">return</span> imgD;
    <span class="Identifier">}</span>;

    <span class="Identifier">var</span> scanLine = <span class="Identifier">function</span>(leftX, rightX, y, imgD, buffer) <span class="Identifier">{</span>
        <span class="Statement">while</span> (leftX &lt;= rightX) <span class="Identifier">{</span>
            <span class="Statement">for</span> (; leftX &lt;= rightX; leftX++) <span class="Identifier">{</span>
                <span class="Statement">if</span> (isMatchColor(leftX, y, imgD, baseColor)) <span class="Identifier">{</span>
                    <span class="Statement">break</span>;
                <span class="Identifier">}</span>
            <span class="Identifier">}</span>
            <span class="Statement">if</span> (rightX &lt; leftX) <span class="Identifier">{</span>
                <span class="Statement">break</span>;
            <span class="Identifier">}</span>
            <span class="Statement">for</span> (; leftX &lt;= rightX; leftX++) <span class="Identifier">{</span>
                <span class="Statement">if</span> (!isMatchColor(leftX, y, imgD, baseColor)) <span class="Identifier">{</span>
                    <span class="Statement">break</span>;
                <span class="Identifier">}</span>
            <span class="Identifier">}</span>
            buffer.push(<span class="Identifier">{</span> x : leftX - 1, y : y<span class="Identifier">}</span>);
        <span class="Identifier">}</span>
    <span class="Identifier">}</span>;

    <span class="Identifier">var</span> paint = <span class="Identifier">function</span>(x, y, imgD) <span class="Identifier">{</span>
        <span class="Statement">if</span> (isMatchColor(x, y, imgD, penColor)) <span class="Identifier">{</span>
            <span class="Statement">return</span> imgD;
        <span class="Identifier">}</span>
        <span class="Identifier">var</span> buffer = <span class="Identifier">[]</span>;
        buffer.push(<span class="Identifier">{</span> x : x, y : y <span class="Identifier">}</span>);
        <span class="Statement">while</span> (buffer.length &gt; 0) <span class="Identifier">{</span>
            <span class="Identifier">var</span> point = buffer.pop();
            <span class="Identifier">var</span> leftX = point.x;
            <span class="Identifier">var</span> rightX = point.x;
            <span class="Comment">/* skip already painted */</span>
            <span class="Statement">if</span> (isMatchColor(point.x, point.y, imgD, penColor)) <span class="Identifier">{</span>
                <span class="Statement">continue</span>;
            <span class="Identifier">}</span>
            <span class="Comment">/* search left point */</span>
            <span class="Statement">for</span> (; 0 &lt; leftX; leftX--) <span class="Identifier">{</span>
                <span class="Statement">if</span> (!isMatchColor(leftX - 1, point.y, imgD, baseColor)) <span class="Identifier">{</span>
                    <span class="Statement">break</span>;
                <span class="Identifier">}</span>
            <span class="Identifier">}</span>
            <span class="Comment">/* search right point */</span>
            <span class="Statement">for</span> (; rightX &lt; cWidth - 1; rightX++) <span class="Identifier">{</span>
                <span class="Statement">if</span> (!isMatchColor(rightX + 1, point.y, imgD, baseColor)) <span class="Identifier">{</span>
                    <span class="Statement">break</span>;
                <span class="Identifier">}</span>
            <span class="Identifier">}</span>
            <span class="Comment">/* paint from leftX to rightX */</span>
            imgD = paintHorizontal(leftX, rightX, point.y, imgD);
            <span class="Comment">/* search next lines */</span>
            <span class="Statement">if</span> (point.y + 1 &lt; cHeight) <span class="Identifier">{</span>
                scanLine(leftX, rightX, point.y + 1, imgD, buffer);
            <span class="Identifier">}</span>
            <span class="Statement">if</span> (point.y - 1 &gt;= 0) <span class="Identifier">{</span>
                scanLine(leftX, rightX, point.y - 1, imgD, buffer);
            <span class="Identifier">}</span>
        <span class="Identifier">}</span>
        <span class="Statement">return</span> imgD;
    <span class="Identifier">}</span>;

    <span class="Statement">return</span> paint(startX, startY, imgData);
<span class="Identifier">}</span>;
</pre>
<h3>スクリプトファイル</h3>
<p><a href="http://www.serendip.ws/resource/scanlineseedfill.js">scanlineseedfill.js</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.serendip.ws/archives/4797/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JavaScript, apply/call メソッドと prototype 継承</title>
		<link>http://www.serendip.ws/archives/4766</link>
		<comments>http://www.serendip.ws/archives/4766#comments</comments>
		<pubDate>Mon, 26 Apr 2010 12:48:07 +0000</pubDate>
		<dc:creator>iNo</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.serendip.ws/?p=4766</guid>
		<description><![CDATA[こちらのサイト『JavaScriptで継承やるときにprototype書きまくるのめんどい人は &#8211; あ、いしかわですね』で Function.apply を使って継承を記述する方法が紹介されていた。 appl [...]]]></description>
			<content:encoded><![CDATA[<p>こちらのサイト『<a href="http://d.hatena.ne.jp/iskwn/20091215/1260828978" class="out" rel="external">JavaScriptで継承やるときにprototype書きまくるのめんどい人は &#8211; あ、いしかわですね</a>』で <code>Function.apply</code> を使って継承を記述する方法が紹介されていた。</p>
<p><code>apply</code> と <code>call</code> の使い方を今一度復習しておく。</p>
<h3><code>Function.apply</code></h3>
<p><code><var>function</var>.apply(<var>obj</var>, <var>args</var>)</code></p>
<ul class="entry-list-style">
<li><var>function</var> を <var>obj</var> のメソッドとして呼び出す。</li>
<li>引数として配列 <var>args</var> を渡すことができる。</li>
<li><var>function</var> のボディ内では <var>obj</var> に <code>this</code> でアクセスできる。</li>
</ul>
<pre><span class="Comment">/* オブジェクトにメソッドを適用させる */</span>
<span class="Special">console.log</span>(<span class="Type">Array</span><span class="Special">.prototype.reverse.apply</span>(<span class="Identifier">[</span>1<span class="Special">, </span>2<span class="Special">, </span>3<span class="Identifier">]</span>))<span class="Special">; </span><span class="Comment">/* [ 3, 2, 1 ] */</span>
<span class="Special">console.log</span>(<span class="Type">String</span><span class="Special">.prototype.split.apply</span>(<span class="Constant">'1,2,3'</span><span class="Special">, </span><span class="Identifier">[</span><span class="Constant">','</span><span class="Identifier">]</span>))<span class="Special">; </span><span class="Comment">/* [ &quot;1&quot;, &quot;2&quot;, &quot;3&quot; ] */</span>

<span class="Identifier">var</span><span class="Special"> toQuestion = </span><span class="Identifier">function</span>(<span class="Special">str</span>)<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">    </span><span class="Statement">return</span><span class="Special"> str + </span><span class="Constant">'?'</span><span class="Special">;</span>
<span class="Identifier">}</span><span class="Special">;</span>
<span class="Special">console.log</span>(<span class="Special">toQuestion.apply</span>(<span class="Statement">null</span><span class="Special">, </span><span class="Identifier">[</span><span class="Constant">'who'</span><span class="Identifier">]</span>))<span class="Special">; </span><span class="Comment">/* who? */</span>
</pre>
<h3><code>Function.call</code></h3>
<p><code><var>function</var>.call(<var>obj</var>, <var>args</var>...)</code></p>
<ul class="entry-list-style">
<li><var>function</var> を <var>obj</var> のメソッドとして呼び出す。</li>
<li>引数として可変長個の <var>args</var> を渡すことができる。</li>
<li><var>function</var> のボディ内では <var>obj</var> に <code>this</code> でアクセスできる。</li>
</ul>
<pre><span class="Comment">/* オブジェクトにメソッドを適用させる */</span>
<span class="Special">console.log</span>(<span class="Type">Array</span><span class="Special">.prototype.reverse.call</span>(<span class="Identifier">[</span>1<span class="Special">, </span>2<span class="Special">, </span>3<span class="Identifier">]</span>))<span class="Special">; </span><span class="Comment">/* [ 3, 2, 1 ] */</span>
<span class="Special">console.log</span>(<span class="Type">String</span><span class="Special">.prototype.split.call</span>(<span class="Constant">'1,2,3'</span><span class="Special">, </span><span class="Constant">','</span>))<span class="Special">; </span><span class="Comment">/* [ &quot;1&quot;, &quot;2&quot;, &quot;3&quot; ] */</span>

<span class="Identifier">var</span><span class="Special"> toQuestion = </span><span class="Identifier">function</span>(<span class="Special">str</span>)<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">    </span><span class="Statement">return</span><span class="Special"> str + </span><span class="Constant">'?'</span><span class="Special">;</span>
<span class="Identifier">}</span><span class="Special">;</span>
<span class="Special">console.log</span>(<span class="Special">toQuestion.call</span>(<span class="Statement">null</span><span class="Special">, </span><span class="Constant">'who'</span>))<span class="Special">; </span><span class="Comment">/* who? */</span>
</pre>
<h3><code>apply</code>/<code>call</code> で継承</h3>
<pre><span class="Identifier">var</span><span class="Special"> Dog = </span><span class="Identifier">function</span>()<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">    </span><span class="Identifier">this</span><span class="Special">.name = </span><span class="Constant">'taro'</span><span class="Special">;</span>
<span class="Identifier">}</span><span class="Special">;</span>

<span class="Special">Dog.prototype = </span><span class="Identifier">{</span>
<span class="Special">    yelp : </span><span class="Identifier">function</span>()<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">        console.log</span>(<span class="Constant">'yap-yap'</span>)<span class="Special">;</span>
<span class="Special">    </span><span class="Identifier">}</span>
<span class="Identifier">}</span><span class="Special">;</span>

<span class="Identifier">var</span><span class="Special"> Shepherd = </span><span class="Identifier">function</span>()<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">    </span><span class="Identifier">this</span><span class="Special">.name = </span><span class="Constant">'jiro'</span><span class="Special">;</span>
<span class="Identifier">}</span><span class="Special">;</span>

<span class="Special">Shepherd.prototype = </span><span class="Statement">new</span><span class="Special"> Dog</span>()<span class="Special">;</span>

(<span class="Identifier">function</span>()<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">    </span><span class="Comment">/* this は Shepherd.prototype なのでここは、</span>
<span class="Comment">     * Shepherd.prototype.bark = function() {</span>
<span class="Comment">     * と同じ。 */</span>
<span class="Special">    </span><span class="Identifier">this</span><span class="Special">.bark = </span><span class="Identifier">function</span>()<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">        console.log</span>(<span class="Constant">'bow-bow'</span>)<span class="Special">;</span>
<span class="Special">    </span><span class="Identifier">}</span><span class="Special">;</span>
<span class="Identifier">}</span>)<span class="Special">.apply</span>(<span class="Special">Shepherd.prototype</span>)<span class="Special">;</span>

<span class="Identifier">var</span><span class="Special"> shepherd = </span><span class="Statement">new</span><span class="Special"> Shepherd</span>()<span class="Special">;</span>
<span class="Special">console.log</span>(<span class="Special">shepherd.name</span>)<span class="Special">; </span><span class="Comment">/* jiro */</span>
<span class="Special">shepherd.yelp</span>()<span class="Special">; </span><span class="Comment">/* yap-yap */</span>
<span class="Special">shepherd.bark</span>()<span class="Special">; </span><span class="Comment">/* bow-bow */</span>
</pre>
<hr />
<p>参考：<a href="http://d.hatena.ne.jp/iskwn/20091215/1260828978" class="out" rel="external">JavaScriptで継承やるときにprototype書きまくるのめんどい人は &#8211; あ、いしかわですね</a><br />
　　　<a href="http://d.hatena.ne.jp/send/20100316/p1" class="out" rel="external">apply/call での継承の話 &#8211; nothing but trouble</a><br />
　　　<a href="http://blog.livedoor.jp/dankogai/archives/51418052.html" class="out" rel="external">404 Blog Not Found:javascript &#8211; 万能継承関数</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.serendip.ws/archives/4766/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JavaScript, Canvas で putImageData による劣化を調べる</title>
		<link>http://www.serendip.ws/archives/4756</link>
		<comments>http://www.serendip.ws/archives/4756#comments</comments>
		<pubDate>Fri, 23 Apr 2010 05:54:33 +0000</pubDate>
		<dc:creator>iNo</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.serendip.ws/?p=4756</guid>
		<description><![CDATA[Ubuntu 9.10 (karmic Koala) の Google Chrome で JavaScript, Canvas の putImageData を使ってイメージの書き戻しをしていたら、イメージの色がどんどん [...]]]></description>
			<content:encoded><![CDATA[<p>Ubuntu 9.10 (karmic Koala) の Google Chrome で JavaScript, Canvas の <code>putImageData</code> を使ってイメージの書き戻しをしていたら、イメージの色がどんどん黒っぽく変化してきた。</p>
<p>こちらのサイト『<a href="http://lislis.sblo.jp/article/37180977.html" class="out" rel="external">りす穴さくら: lislis Paintの技術的説明まとめ</a>』によると Google Chrome では <code>putImageData</code> によって色が微妙に変化するので、透明な Canvas を新しく作って描画し、 <code>drawImage</code> で元の Canvas に書き出すという方法で対処できるらしい。</p>
<p>そこで、各ブラウザによってどの程度劣化するのかを <code>putImageData</code> と <code>drawImage</code> を使ってテストしてみた。<br />
テストしたブラウザとそのバージョンは以下のとおり。</p>
<ul class="entry-list-style">
<li>Windows Google Chrome 5.0.342.9 beta</li>
<li>Windows Firefox 3.0.19</li>
<li>Windows Opera 10.51</li>
<li>Mac Firefox 3.6.3</li>
<li>Mac Google Chrome 5.0.375.17 dev</li>
</li>
<li>Mac Safari 4.0.5</li>
<li>Mac Opera 10.10</li>
</ul>
<p><a href="http://sandbox.serendip.ws/javascript_canvas_putimagedata_test.html">JavaScript, Canvas で putImageData による劣化のテスト</a></p>
<p>以下は <code>putImageData</code> と <code>drawImage</code> での書き戻しの処理部分のコード<br />
<code>drawImage</code> では点（ドット）の描画の方法がわからなかったので短い線を描いている。</p>
<pre><span class="Comment">/* putImageData */</span>
<span class="Comment">/* 現時点でのイメージを保存する。 */</span>
<span class="Identifier">var</span> bufImageData = ctxPutImage.getImageData(0, 0, WIDTH, HEIGHT);
<span class="Comment">/* 保存したイメージにランダムに黒のドットを描く。 */</span>
bufImageData = randomPaint(bufImageData);
<span class="Comment">/* ドットを書き足したイメージをキャンバスに書き戻す。</span>
<span class="Comment"> * この際に Google Chrome などで画質の劣化が発生する。*/</span>
ctxPutImage.putImageData(bufImageData, 0, 0);

<span class="Comment">/* drawImage */</span>
<span class="Comment">/* 一時描画用のキャンバスを作る。 */</span>
<span class="Identifier">var</span> bufCanvas = <span class="Statement">document</span>.createElement(<span class="Constant">'CANVAS'</span>);
<span class="Identifier">var</span> bufCtx = bufCanvas.getContext(<span class="Constant">'2d'</span>);
<span class="Comment">/* キャンバスの縦横サイズを指定する。</span>
<span class="Comment"> * 未指定の場合はデフォルトのキャンバスサイズが適用されてしまう。*/</span>
bufCanvas.width = WIDTH;
bufCanvas.height = HEIGHT;

<span class="Comment">/* 一時描画用のキャンバスにランダムに黒のドットを描く。 */</span>
bufCtx = randomPaint2(bufCtx);
<span class="Comment">/* 表示用のキャンバスに一時描画用のキャンバスを重ねる形で書き足す。 */</span>
ctxDrawImage.drawImage(bufCanvas, 0, 0);
</pre>
<p>結果は Windows 版の Google Chrome 5.0.342.9 beta のみ大幅に色の劣化が発生した。<br />
Windows Firefox 3.0.19 と Mac Opera 10.10 では <code>shadowBlur</code> が効いていないため若干表示色が違う。</p>
<p><img src="http://www.serendip.ws/wordpress/wp-content/uploads/canvas_putimage_test_20100423_141200.png" alt="JavaScript, Canvas putImageData/getImage のテスト結果" title="JavaScript, Canvas putImageData/getImage のテスト結果" width="555" height="1540" class="size-full wp-image-4758" /></p>
<hr />
<p>参考：<a href="http://www.html5.jp/canvas/ref.html" class="out" rel="external">Canvasリファレンス &#8211; HTML5.JP</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.serendip.ws/archives/4756/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript HTML5 DOM Storage</title>
		<link>http://www.serendip.ws/archives/4753</link>
		<comments>http://www.serendip.ws/archives/4753#comments</comments>
		<pubDate>Thu, 22 Apr 2010 12:47:05 +0000</pubDate>
		<dc:creator>iNo</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.serendip.ws/?p=4753</guid>
		<description><![CDATA[DOM Storage 属性・メソッド length 格納されているデータの数(unsinged long)を返す、読込専用属性。 key(index) インデックス(unsinged long)を引数として、対応する格 [...]]]></description>
			<content:encoded><![CDATA[<h3>DOM Storage 属性・メソッド</h3>
<dl class="entry-list-style">
<dt><code>length</code></dt>
<dd>格納されているデータの数(<code>unsinged long</code>)を返す、読込専用属性。</dd>
<dt><code>key(index)</code></dt>
<dd>インデックス(<code>unsinged long</code>)を引数として、対応する格納データ文字列を取得する。<br />
格納されているキーとデータのペアの数以上のインデックス値を渡すと <code>null</code> を返す。</dd>
<dt><code>getItem(key)</code></dt>
<dd>キー文字列を引数として、対応する格納データ文字列を取得する。<br />
キーが存在しない場合 <code>null</code> を返す。<br />
プロパティアクセスでも処理可能。</p>
<pre>var val = localStorage.key;
</pre>
</dd>
<dt><code>setItem(key, data)</code></dt>
<dd>キー文字列と格納するデータ文字列を引数として、データを保存する。<br />
プロパティアクセスでも処理可能。</p>
<pre>localStorage.key = data;
</pre>
</dd>
<dt><code>removeItem(key)</code></dt>
<dd>キー文字列を引数として、対応する格納データ文字列を削除する。<br />
対応するキーがない場合は何もしない。</dd>
<dt><code>clear()</code></dt>
<dd>全てのキーとその対応データを削除する。<br />
データがない場合は何もしない。</dd>
</dl>
<h3>ブラウザで Storage データを削除</h3>
<p>Firefox では &quot;Tools&quot; → &quot;Clear Recent History&#8230;&quot; の Cookie の削除で &quot;Time range to clear&quot; の &quot;Everything&quot; を選択して実行すると削除できる。</p>
<p>Google Chrome では、&quot;オプション&quot; → &quot;高度な設定&quot; → &quot;プライバシー&quot; → &quot;閲覧履歴データの消去&#8230;&quot; から &quot;Cookie と他のサイトのデータを削除する&quot; にチェックを入れて実行すると削除できる。</p>
<hr />
<p>参考：<a href="https://developer.mozilla.org/en/DOM/Storage" class="out" rel="external">DOM Storage &#8211; MDC</a><br />
　　　<a href="http://dev.w3.org/html5/webstorage/" class="out" rel="external">Web Storage</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.serendip.ws/archives/4753/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript 配列 (Array) の反復的なメソッド</title>
		<link>http://www.serendip.ws/archives/4732</link>
		<comments>http://www.serendip.ws/archives/4732#comments</comments>
		<pubDate>Sun, 18 Apr 2010 13:39:17 +0000</pubDate>
		<dc:creator>iNo</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.serendip.ws/?p=4732</guid>
		<description><![CDATA[JavaScript1.6、 1.8 で追加された、配列 (Array) の反復メソッドについて。 filter 配列を、引数として渡された関数でフィルタリングして、結果が真(true)となる要素からなる配列を作る。 f [...]]]></description>
			<content:encoded><![CDATA[<p>JavaScript1.6、 1.8 で追加された、配列 (Array) の反復メソッドについて。</p>
<h3><code>filter</code></h3>
<p>配列を、引数として渡された関数でフィルタリングして、結果が真(<code>true</code>)となる要素からなる配列を作る。</p>
<p><code>filter</code> に渡される関数は、要素の値、インデックス、配列の3つの引数を取る。<br />
<code>function(<var>val</var>, <var>index</var>, <var>array</var>)</code></p>
<p>配列内の偶数要素からなる配列を作る例。</p>
<pre><span class="Identifier">var</span><span class="Special"> ary = </span><span class="Identifier">[</span>0<span class="Special">, </span>1<span class="Special">, </span>2<span class="Special">, </span>3<span class="Special">, </span>4<span class="Special">, </span>5<span class="Special">, </span>6<span class="Special">, </span>7<span class="Special">, </span>8<span class="Special">, </span>9<span class="Identifier">]</span><span class="Special">;</span>
<span class="Identifier">var</span><span class="Special"> retAry = ary.filter</span>(<span class="Identifier">function</span>(<span class="Special">x</span>)<span class="Special"> </span><span class="Identifier">{</span><span class="Special"> </span><span class="Statement">return</span><span class="Special"> x % </span>2<span class="Special"> === </span>0<span class="Special"> </span><span class="Identifier">}</span>)<span class="Special">;</span>
</pre>
<input type="button" id="array-filter-test" value="Run" />
<p>参考：<a href="https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/Array/filter" class="out" rel="external">filter &#8211; MDC</a></p>
<h3><code>map</code></h3>
<p>配列の各要素に、引数として渡された関数を適用した配列を作る。</p>
<p><code>map</code> に渡される関数は、要素の値、インデックス、配列の3つの引数を取る。<br />
<code>function(<var>val</var>, <var>index</var>, <var>array</var>)</code></p>
<p>配列の各要素を2倍にした配列を作る例。</p>
<pre><span class="Identifier">var</span><span class="Special"> ary = </span><span class="Identifier">[</span>0<span class="Special">, </span>1<span class="Special">, </span>2<span class="Special">, </span>3<span class="Special">, </span>4<span class="Special">, </span>5<span class="Identifier">]</span><span class="Special">;</span>
<span class="Identifier">var</span><span class="Special"> retAry = ary.map</span>(<span class="Identifier">function</span>(<span class="Special">x</span>)<span class="Special"> </span><span class="Identifier">{</span><span class="Special"> </span><span class="Statement">return</span><span class="Special"> x * </span>2<span class="Special"> </span><span class="Identifier">}</span>)<span class="Special">;</span>
</pre>
<input type="button" id="array-map-test" value="Run" />
<p>参考：<a href="https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/Array/map" class="out" rel="external">map &#8211; MDC</a></p>
<h3><code>reduce</code></h3>
<p>配列の要素を2つずつ左から順に、引数として渡された関数を適用してゆき結果を得る。</p>
<p><code>reduce</code> の第2引数には初期値を指定できる。<br />
初期値が与えられなかった場合は、配列の最初の要素が初期値になり、2番目の要素が現在の要素の値となる。</p>
<p><code>reduce</code> に渡される関数は4つの引数をとる。<br />
<code>function(<var>tmp</var>, <var>val</var>, <var>index</var>, <var>array</var>)</code></p>
<dl class="entry-list-style">
<dt><code>tmp</code></dt>
<dd>初期値または直前の関数実行結果の値</dd>
<dt><code>val</code></dt>
<dd>現在の要素の値</dd>
<dt><code>index</code></dt>
<dd>現在のインデックス</dd>
<dt><code>array</code></dt>
<dd>繰り返しが行われる配列</dd>
</dl>
<p>配列の各要素を1.5倍したものを全て足し合せた合計値を算出する例。</p>
<pre><span class="Identifier">var</span><span class="Special"> ary = </span><span class="Identifier">[</span>1<span class="Special">, </span>2<span class="Special">, </span>3<span class="Identifier">]</span><span class="Special">;</span>
<span class="Comment">/* retVal1</span>
<span class="Comment"> * 初期値を与えていないため、</span>
<span class="Comment"> * 初期値は配列の最初の要素の値 1 となリ</span>
<span class="Comment"> * 現在の要素の値は配列の 2 番目の要素の値 2 となる。</span>
<span class="Comment"> *  val          tmp     next-tmp</span>
<span class="Comment"> * (2   * 1.5) +  1       =&gt; 4</span>
<span class="Comment"> * (3   * 1.5) +  4       =&gt; 8.5 (result)</span>
<span class="Comment"> */</span>
<span class="Identifier">var</span><span class="Special"> retVal1 = ary.reduce</span>(<span class="Identifier">function</span>(<span class="Special">tmp, val</span>)<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">    </span><span class="Statement">return</span><span class="Special"> </span>(<span class="Special">val * </span>1<span class="Special">.</span>5)<span class="Special"> + tmp;</span>
<span class="Identifier">}</span>)<span class="Special">;</span>
<span class="Comment">/* retVal2</span>
<span class="Comment"> * 初期値を 0 としたため、</span>
<span class="Comment"> * 現在の要素の値は配列の最初の要素の値 1 となる</span>
<span class="Comment"> *  val          tmp     next-tmp</span>
<span class="Comment"> * (1   * 1.5) +  0       =&gt; 1.5</span>
<span class="Comment"> * (2   * 1.5) +  1.5     =&gt; 4.5</span>
<span class="Comment"> * (3   * 1.5) +  4.5     =&gt; 9 (result)</span>
<span class="Comment"> */</span>
<span class="Identifier">var</span><span class="Special"> retVal2 = ary.reduce</span>(<span class="Identifier">function</span>(<span class="Special">tmp, val</span>)<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">    </span><span class="Statement">return</span><span class="Special"> </span>(<span class="Special">val * </span>1<span class="Special">.</span>5)<span class="Special"> + tmp;</span>
<span class="Identifier">}</span><span class="Special">, </span>0)<span class="Special">;</span>
</pre>
<input type="button" id="array-reduce-test" value="Run" />
<p>参考：<a href="https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Objects/Array/reduce" class="out" rel="external">reduce &#8211; MDC</a></p>
<h3><code>reduceRight</code></h3>
<p>配列の要素を2つずつ右から順に、引数として渡された関数を適用してゆき結果を得る。<br />
<code>reduce</code> の右から処理をする版。</p>
<p><code>reduceRight</code> の第2引数には初期値を指定できる。<br />
初期値が与えられなかった場合は、配列の最後の要素が初期値になり、最後から2番目の要素が現在の要素の値となる。</p>
<p><code>reduceRight</code> に渡される関数は4つの引数をとる。<br />
<code>function(<var>tmp</var>, <var>val</var>, <var>index</var>, <var>array</var>)</code></p>
<dl class="entry-list-style">
<dt><code>tmp</code></dt>
<dd>初期値または直前の関数実行結果の値</dd>
<dt><code>val</code></dt>
<dd>現在の要素の値</dd>
<dt><code>index</code></dt>
<dd>現在のインデックス</dd>
<dt><code>array</code></dt>
<dd>繰り返しが行われる配列</dd>
</dl>
<p>配列の各要素を全て1.5倍したものを足し合せた合計値を算出する例。</p>
<pre><span class="Identifier">var</span><span class="Special"> ary = </span><span class="Identifier">[</span>1<span class="Special">, </span>2<span class="Special">, </span>3<span class="Identifier">]</span><span class="Special">;</span>
<span class="Comment">/* retVal1</span>
<span class="Comment"> * 初期値を与えていないため、</span>
<span class="Comment"> * 初期値は配列の最後の要素の値 3 となリ</span>
<span class="Comment"> * 現在の要素の値は配列の最後から2番目の要素の値 2 となる。</span>
<span class="Comment"> *  val          tmp     next-tmp</span>
<span class="Comment"> * (2   * 1.5) +  3       =&gt; 6</span>
<span class="Comment"> * (1   * 1.5) +  6       =&gt; 7.5 (result)</span>
<span class="Comment"> */</span>
<span class="Identifier">var</span><span class="Special"> retVal1 = ary.reduceRight</span>(<span class="Identifier">function</span>(<span class="Special">tmp, val</span>)<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">    </span><span class="Statement">return</span><span class="Special"> </span>(<span class="Special">val * </span>1<span class="Special">.</span>5)<span class="Special"> + tmp;</span>
<span class="Identifier">}</span>)<span class="Special">;</span>
<span class="Comment">/* retVal2</span>
<span class="Comment"> * 初期値を 0 としたため、</span>
<span class="Comment"> * 現在の要素の値は配列の最後の要素の値 3 となる</span>
<span class="Comment"> *  val          tmp     next-tmp</span>
<span class="Comment"> * (3   * 1.5) +  0       =&gt; 4.5</span>
<span class="Comment"> * (2   * 1.5) +  4.5     =&gt; 7.5</span>
<span class="Comment"> * (1   * 1.5) +  7.5     =&gt; 9 (result)</span>
<span class="Comment"> */</span>
<span class="Identifier">var</span><span class="Special"> retVal2 = ary.reduceRight</span>(<span class="Identifier">function</span>(<span class="Special">tmp, val</span>)<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">    </span><span class="Statement">return</span><span class="Special"> </span>(<span class="Special">val * </span>1<span class="Special">.</span>5)<span class="Special"> + tmp;</span>
<span class="Identifier">}</span><span class="Special">, </span>0)<span class="Special">;</span>
</pre>
<input type="button" id="array-reduce-right-test" value="Run" />
<p>参考：<a href="https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Objects/Array/reduceRight" class="out" rel="external">reduceRight &#8211; MDC</a></p>
<h3><code>every</code></h3>
<p>配列内の全ての要素が、引数として渡された関数によって真の結果を得ることができるかを調べる。<br />
配列が空の場合は真を返す。</p>
<p><code>every</code> に渡される関数は、要素の値、インデックス、配列の3つの引数を取る。<br />
<code>function(<var>val</var>, <var>index</var>, <var>array</var>)</code></p>
<p>配列内の全ての要素が偶数であるかを調べる例。</p>
<pre><span class="Identifier">var</span><span class="Special"> isEven = </span><span class="Identifier">function</span>(<span class="Special">val</span>)<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">    </span><span class="Statement">return</span><span class="Special"> val % </span>2<span class="Special"> === </span>0<span class="Special">;</span>
<span class="Identifier">}</span><span class="Special">;</span>
<span class="Identifier">var</span><span class="Special"> ary1 = </span><span class="Identifier">[</span>1<span class="Special">, </span>2<span class="Special">, </span>3<span class="Identifier">]</span><span class="Special">;</span>
<span class="Identifier">var</span><span class="Special"> ret1 = ary1.every</span>(<span class="Special">isEven</span>)<span class="Special">;</span>
<span class="Identifier">var</span><span class="Special"> ary2 = </span><span class="Identifier">[</span>2<span class="Special">, </span>4<span class="Special">, </span>6<span class="Identifier">]</span><span class="Special">;</span>
<span class="Identifier">var</span><span class="Special"> ret2 = ary2.every</span>(<span class="Special">isEven</span>)<span class="Special">;</span>
<span class="Identifier">var</span><span class="Special"> ary3 = </span><span class="Identifier">[]</span><span class="Special">;</span>
<span class="Identifier">var</span><span class="Special"> ret3 = ary3.every</span>(<span class="Special">isEven</span>)<span class="Special">;</span>
</pre>
<input type="button" id="array-every-test" value="Run" />
<p>参考：<a href="https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/Array/every" class="out" rel="external">every &#8211; MDC</a></p>
<h3><code>some</code></h3>
<p>配列内に、引数として渡された関数によって真の結果を得ることができる要素が1つでも存在するかを調べる。</p>
<p><code>some</code> に渡される関数は、要素の値、インデックス、配列の3つの引数を取る。<br />
<code>function(<var>val</var>, <var>index</var>, <var>array</var>)</code></p>
<p>配列内に奇数の要素が存在するかを調べる例。</p>
<pre><span class="Identifier">var</span><span class="Special"> isOdd = </span><span class="Identifier">function</span>(<span class="Special">val</span>)<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">    </span><span class="Statement">return</span><span class="Special"> val % </span>2<span class="Special"> === </span>1<span class="Special">;</span>
<span class="Identifier">}</span><span class="Special">;</span>
<span class="Identifier">var</span><span class="Special"> ary1 = </span><span class="Identifier">[</span>2<span class="Special">, </span>5<span class="Special">, </span>6<span class="Identifier">]</span><span class="Special">;</span>
<span class="Identifier">var</span><span class="Special"> ret1 = ary1.some</span>(<span class="Special">isOdd</span>)<span class="Special">;</span>
<span class="Identifier">var</span><span class="Special"> ary2 = </span><span class="Identifier">[</span>2<span class="Special">, </span>4<span class="Special">, </span>6<span class="Identifier">]</span><span class="Special">;</span>
<span class="Identifier">var</span><span class="Special"> ret2 = ary2.some</span>(<span class="Special">isOdd</span>)<span class="Special">;</span>
<span class="Identifier">var</span><span class="Special"> ary3 = </span><span class="Identifier">[]</span><span class="Special">;</span>
<span class="Identifier">var</span><span class="Special"> ret3 = ary3.some</span>(<span class="Special">isOdd</span>)<span class="Special">;</span>
</pre>
<input type="button" id="array-some-test" value="Run" />
<p>参考：<a href="https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/Array/some" class="out" rel="external">some &#8211; MDC</a></p>
<h3><code>forEach</code></h3>
<p>引数として渡された関数を配列の各要素に適用していく。</p>
<p><code>forEach</code> に渡される関数は、要素の値、インデックス、配列の3つの引数を取る。<br />
<code>function(<var>val</var>, <var>index</var>, <var>array</var>)</code></p>
<p>配列の各要素を () で囲んだ文字列として連結していく例。</p>
<pre><span class="Identifier">var</span><span class="Special"> ary = </span><span class="Identifier">[</span>1<span class="Special">, </span>2<span class="Special">, </span>3<span class="Identifier">]</span><span class="Special">;</span>
<span class="Identifier">var</span><span class="Special"> retStr = </span><span class="Constant">''</span><span class="Special">;</span>
<span class="Special">ary.forEach</span>(<span class="Identifier">function</span>(<span class="Special">x</span>)<span class="Special"> </span><span class="Identifier">{</span><span class="Special"> retStr += </span><span class="Constant">'('</span><span class="Special"> + x + </span><span class="Constant">')'</span><span class="Special">; </span><span class="Identifier">}</span>)<span class="Special">;</span>
</pre>
<input type="button" id="array-foreach-test" value="Run" />
<p>参考：<a href="https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/Array/ForEach" class="out" rel="external">forEach &#8211; MDC</a></p>
<hr />
<p>参考：<a href="https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Objects/Array" class="out" rel="external">Array &#8211; MDC</a><br />
　　　<a href="https://developer.mozilla.org/ja/New_in_JavaScript_1.6" class="out" rel="external">New in JavaScript 1.6 &#8211; MDC</a></p>
<p><script src="/resource/javascript_serendip_entry_20100418.js" type="text/javascript"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.serendip.ws/archives/4732/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JavaScript でループ処理の中でのイベント割り当てにクロージャを使う</title>
		<link>http://www.serendip.ws/archives/4725</link>
		<comments>http://www.serendip.ws/archives/4725#comments</comments>
		<pubDate>Thu, 15 Apr 2010 13:09:57 +0000</pubDate>
		<dc:creator>iNo</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.serendip.ws/?p=4725</guid>
		<description><![CDATA[このクロージャの使い方を忘れてしまうのでメモしておく。 ループ処理の中でイベントを割り当てる場合に、ループカウンタが回り切ったものが適用されてしまう問題の解決方法。 デモ JavaScript コード /* クロージャを [...]]]></description>
			<content:encoded><![CDATA[<p>このクロージャの使い方を忘れてしまうのでメモしておく。</p>
<p>ループ処理の中でイベントを割り当てる場合に、ループカウンタが回り切ったものが適用されてしまう問題の解決方法。</p>
<p><a href="http://sandbox.serendip.ws/javascript_closure_event_dispatch.html">デモ</a></p>
<h3>JavaScript コード</h3>
<pre><span class="Comment">/* クロージャを使わない場合（カウンタが回り切った値 3 が表示される） */</span>
<span class="Statement">for</span><span class="Special"> </span>(<span class="Identifier">var</span><span class="Special"> i = </span>0<span class="Special">; i &lt; </span>3<span class="Special">; i++</span>)<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">    $</span>(<span class="Constant">'#action1-'</span><span class="Special">+i</span>)<span class="Special">.click</span>(<span class="Identifier">function</span>()<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">        $</span>(<span class="Constant">'#msg1'</span>)<span class="Special">.text</span>(<span class="Constant">'Action'</span><span class="Special"> + i</span>)<span class="Special">;</span>
<span class="Special">    </span><span class="Identifier">}</span>)<span class="Special">;</span>
<span class="Identifier">}</span>
<span class="Comment">/* クロージャを使った場合 */</span>
<span class="Statement">for</span><span class="Special"> </span>(<span class="Identifier">var</span><span class="Special"> i = </span>0<span class="Special">; i &lt; </span>3<span class="Special">; i++</span>)<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">    </span><span class="Identifier">var</span><span class="Special"> func = </span>(<span class="Identifier">function</span><span class="Special"> </span>(<span class="Special">index</span>)<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">        </span><span class="Statement">return</span><span class="Special"> </span><span class="Identifier">function</span>()<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">            $</span>(<span class="Constant">'#msg2'</span>)<span class="Special">.text</span>(<span class="Constant">'Action'</span><span class="Special"> + index</span>)<span class="Special">;</span>
<span class="Special">        </span><span class="Identifier">}</span><span class="Special">;</span>
<span class="Special">    </span><span class="Identifier">}</span>)(<span class="Special">i</span>)<span class="Special">;</span>
<span class="Special">    $</span>(<span class="Constant">'#action2-'</span><span class="Special">+i</span>)<span class="Special">.click</span>(<span class="Special">func</span>)<span class="Special">;</span>
<span class="Identifier">}</span>
</pre>
<h3>HTML コード</h3>
<pre><span class="Identifier">&lt;</span><span class="Statement">ul</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;action-list1&quot;</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">li</span><span class="Identifier">&gt;&lt;</span><span class="Statement">a</span><span class="Identifier"> </span><span class="Type">href</span><span class="Identifier">=</span><span class="Constant">&quot;#&quot;</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;action1-0&quot;</span><span class="Identifier">&gt;</span><span class="Underlined">Action0</span><span class="Identifier">&lt;/</span><span class="Statement">a</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">li</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">li</span><span class="Identifier">&gt;&lt;</span><span class="Statement">a</span><span class="Identifier"> </span><span class="Type">href</span><span class="Identifier">=</span><span class="Constant">&quot;#&quot;</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;action1-1&quot;</span><span class="Identifier">&gt;</span><span class="Underlined">Action1</span><span class="Identifier">&lt;/</span><span class="Statement">a</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">li</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">li</span><span class="Identifier">&gt;&lt;</span><span class="Statement">a</span><span class="Identifier"> </span><span class="Type">href</span><span class="Identifier">=</span><span class="Constant">&quot;#&quot;</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;action1-2&quot;</span><span class="Identifier">&gt;</span><span class="Underlined">Action2</span><span class="Identifier">&lt;/</span><span class="Statement">a</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">li</span><span class="Identifier">&gt;</span>
<span class="Identifier">&lt;/</span><span class="Statement">ul</span><span class="Identifier">&gt;</span>

<span class="Identifier">&lt;</span><span class="Statement">pre</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;msg1&quot;</span><span class="Identifier">&gt;</span>message<span class="Identifier">&lt;/</span><span class="Statement">pre</span><span class="Identifier">&gt;</span>

<span class="Identifier">&lt;</span><span class="Statement">ul</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;action-list2&quot;</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">li</span><span class="Identifier">&gt;&lt;</span><span class="Statement">a</span><span class="Identifier"> </span><span class="Type">href</span><span class="Identifier">=</span><span class="Constant">&quot;#&quot;</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;action2-0&quot;</span><span class="Identifier">&gt;</span><span class="Underlined">Action0</span><span class="Identifier">&lt;/</span><span class="Statement">a</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">li</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">li</span><span class="Identifier">&gt;&lt;</span><span class="Statement">a</span><span class="Identifier"> </span><span class="Type">href</span><span class="Identifier">=</span><span class="Constant">&quot;#&quot;</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;action2-1&quot;</span><span class="Identifier">&gt;</span><span class="Underlined">Action1</span><span class="Identifier">&lt;/</span><span class="Statement">a</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">li</span><span class="Identifier">&gt;</span>
    <span class="Identifier">&lt;</span><span class="Statement">li</span><span class="Identifier">&gt;&lt;</span><span class="Statement">a</span><span class="Identifier"> </span><span class="Type">href</span><span class="Identifier">=</span><span class="Constant">&quot;#&quot;</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;action2-2&quot;</span><span class="Identifier">&gt;</span><span class="Underlined">Action2</span><span class="Identifier">&lt;/</span><span class="Statement">a</span><span class="Identifier">&gt;&lt;/</span><span class="Statement">li</span><span class="Identifier">&gt;</span>
<span class="Identifier">&lt;/</span><span class="Statement">ul</span><span class="Identifier">&gt;</span>

<span class="Identifier">&lt;</span><span class="Statement">pre</span><span class="Identifier"> </span><span class="Type">id</span><span class="Identifier">=</span><span class="Constant">&quot;msg2&quot;</span><span class="Identifier">&gt;</span>message<span class="Identifier">&lt;/</span><span class="Statement">pre</span><span class="Identifier">&gt;</span>
</pre>
<div class="amazlet-box" style="margin-bottom:0px;font-size:9pt;">
<div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113911/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41H0Dk-K3PL._SL160_.jpg" alt="JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス" style="border: none;" /></a></div>
<div class="amazlet-info" style="float:left;margin-left:15px;margin-top:10px;line-height:120%">
<div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113911/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank">JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス</a>
<div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4873113911/serendip7822-22/ref=nosim/" title="JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス" target="_blank">amazlet</a> at 10.04.15</div>
</div>
<div class="amazlet-detail">Douglas Crockford <br />オライリージャパン <br />売り上げランキング: 1783</div>
<div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113911/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div>
</div>
<div class="amazlet-footer" style="clear: left"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.serendip.ws/archives/4725/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Processing.js で Drawing</title>
		<link>http://www.serendip.ws/archives/4036</link>
		<comments>http://www.serendip.ws/archives/4036#comments</comments>
		<pubDate>Wed, 30 Dec 2009 13:11:11 +0000</pubDate>
		<dc:creator>iNo</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.serendip.ws/?p=4036</guid>
		<description><![CDATA[Processing.js で JavaScript を使って Drawing をしてみる。 processing.init.js をロードすることで type が application/processing の &#038;l [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://processingjs.org/" class="out">Processing.js</a> で JavaScript を使って Drawing をしてみる。</p>
<p><a href="http://sandbox.serendip.ws/processing_js_test.html"><img src="http://www.serendip.ws/wordpress/wp-content/uploads/processing_js_test_20091230_001.png" alt="Processing.js demo Screenshot" title="Processing.js demo Screenshot" width="250" height="250" class="size-full wp-image-4038" /></a></p>
<p>processing.init.js をロードすることで <code>type</code> が <code>application/processing</code> の <code>&lt;script&gt;</code> タグの中に記述されたコードが <code>Processing</code> で実行できるようになる。</p>
<p><a href="http://sandbox.serendip.ws/processing_js_test.html">以下のコードのデモ</a></p>
<pre><span class="Identifier">&lt;</span><span class="Statement">script</span><span class="Identifier"> </span><span class="Type">src</span><span class="Identifier">=</span><span class="Constant">&quot;./processing.init.js&quot;</span><span class="Identifier"> </span><span class="Type">type</span><span class="Identifier">=</span><span class="Constant">&quot;text/javascript&quot;</span><span class="Identifier">&gt;</span><span class="Identifier">&lt;/</span><span class="Statement">script</span><span class="Identifier">&gt;</span>
<span class="Identifier">&lt;</span><span class="Statement">script</span><span class="Identifier"> </span><span class="Type">src</span><span class="Identifier">=</span><span class="Constant">&quot;./processing.min.js&quot;</span><span class="Identifier"> </span><span class="Type">type</span><span class="Identifier">=</span><span class="Constant">&quot;text/javascript&quot;</span><span class="Identifier">&gt;</span><span class="Identifier">&lt;/</span><span class="Statement">script</span><span class="Identifier">&gt;</span>

<span class="Identifier">&lt;</span><span class="Statement">script</span><span class="Identifier"> </span><span class="Type">type</span><span class="Identifier">=</span><span class="Constant">&quot;application/processing&quot;</span><span class="Identifier">&gt;</span>
<span class="Special">Circle circles = </span><span class="Statement">new</span><span class="Special"> Circle</span><span class="Identifier">[</span>50<span class="Identifier">]</span><span class="Special">;</span>

<span class="Special">void setup</span>()<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">    size</span>(500<span class="Special">, </span>500)<span class="Special">;</span>
<span class="Special">    frameRate</span>(15)<span class="Special">;</span>
<span class="Special">    </span><span class="Statement">for</span><span class="Special"> </span>(<span class="Statement">int</span><span class="Special"> i = </span>0<span class="Special">; i&lt; circles.length; i++</span>)<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">        circles</span><span class="Identifier">[</span><span class="Special">i</span><span class="Identifier">]</span><span class="Special"> = </span><span class="Statement">new</span><span class="Special"> Circle</span>()<span class="Special">;</span>
<span class="Special">    </span><span class="Identifier">}</span>
<span class="Identifier">}</span>

<span class="Special">void draw</span>()<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">    background</span>(255)<span class="Special">;</span>
<span class="Special">    </span><span class="Statement">for</span><span class="Special"> </span>(<span class="Statement">int</span><span class="Special"> i = </span>0<span class="Special">; i&lt;circles.length; i++</span>)<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">        circles</span><span class="Identifier">[</span><span class="Special">i</span><span class="Identifier">]</span><span class="Special">.update</span>()<span class="Special">;</span>
<span class="Special">    </span><span class="Identifier">}</span>
<span class="Identifier">}</span>

<span class="Statement">class</span><span class="Special"> Circle </span><span class="Identifier">{</span>
<span class="Special">    </span><span class="Statement">float</span><span class="Special"> radius, x, y, r, g, b, a, ra;</span>
<span class="Special">    </span><span class="Statement">int</span><span class="Special"> count;</span>

<span class="Special">    Circle</span>()<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">        init</span>()<span class="Special">;</span>
<span class="Special">    </span><span class="Identifier">}</span>

<span class="Special">    void init</span>()<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">        radius = </span>0<span class="Special">.</span>0<span class="Special">;</span>
<span class="Special">        x = random</span>(<span class="Special">width</span>)<span class="Special">;</span>
<span class="Special">        y = random</span>(<span class="Special">height</span>)<span class="Special">;</span>
<span class="Special">        r = random</span>(50<span class="Special">, </span>255)<span class="Special">;</span>
<span class="Special">        g = random</span>(255)<span class="Special">;</span>
<span class="Special">        b = random</span>(255)<span class="Special">;</span>
<span class="Special">        a = random</span>(50<span class="Special">, </span>200)<span class="Special">;</span>
<span class="Special">        ra = random</span>(10)<span class="Special">;</span>
<span class="Special">        count = parseInt</span>(<span class="Special">random</span>(9))<span class="Special">;</span>
<span class="Special">    </span><span class="Identifier">}</span>

<span class="Special">    void update</span>()<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">        </span><span class="Statement">if</span><span class="Special"> </span>(<span class="Special">count &gt; </span>5)<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">            init</span>()<span class="Special">;</span>
<span class="Special">        </span><span class="Identifier">}</span>
<span class="Special">        radius = radius + sin</span>(<span class="Special">frameCount/</span>10)<span class="Special"> * ra;</span>
<span class="Special">        noStroke</span>()<span class="Special">;</span>
<span class="Special">        fill</span>(<span class="Special">r, g, b, a</span>)<span class="Special">;</span>
<span class="Special">        ellipse</span>(<span class="Special">x, y, radius, radius</span>)<span class="Special">;</span>
<span class="Special">        </span><span class="Statement">if</span><span class="Special"> </span>(<span class="Special">radius &lt;= </span>0<span class="Special">.</span>001)<span class="Special"> </span><span class="Identifier">{</span>
<span class="Special">            count++;</span>
<span class="Special">        </span><span class="Identifier">}</span>
<span class="Special">    </span><span class="Identifier">}</span>
<span class="Identifier">}</span>
<span class="Identifier">&lt;/</span><span class="Statement">script</span><span class="Identifier">&gt;</span>

<span class="Identifier">&lt;</span><span class="Statement">canvas</span><span class="Identifier"> </span><span class="Type">width</span><span class="Identifier">=</span><span class="Constant">&quot;500&quot;</span><span class="Identifier"> </span><span class="Type">height</span><span class="Identifier">=</span><span class="Constant">&quot;500&quot;</span><span class="Identifier"> </span><span class="Type">style</span><span class="Identifier">=</span><span class="Constant">&quot;border:1px solid #000;&quot;</span><span class="Identifier">&gt;</span><span class="Identifier">&lt;/</span><span class="Statement">canvas</span><span class="Identifier">&gt;</span>
</pre>
<p>参考：<a href="http://d.hatena.ne.jp/amachang/20080509/1210355674" class="out">ブラウザでお絵描きプログラミング！ Processing.js 登場！ &#8211; IT戦記</a><br />
　　　<a href="http://processingjs.org/reference" class="out">Reference &#8211; Processing.js</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.serendip.ws/archives/4036/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

