<?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>Laboratory &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/laboratory/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Mon, 28 Jun 2010 23:31:00 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>実験室: 条件でスタイルシートを切り替えるJS小技いろいろ</title>
		<link>https://blog.mach3.jp/2010/06/28/toggle-stylesheet-js.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 28 Jun 2010 23:31:00 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/06/28/%e5%ae%9f%e9%a8%93%e5%ae%a4-%e6%9d%a1%e4%bb%b6%e3%81%a7%e3%82%b9%e3%82%bf%e3%82%a4%e3%83%ab%e3%82%b7%e3%83%bc%e3%83%88%e3%82%92%e5%88%87%e3%82%8a%e6%9b%bf%e3%81%88%e3%82%8bjs%e5%b0%8f%e6%8a%80.html</guid>

					<description><![CDATA[例えばブラウザによってスタイルを追加したり、 ウィンドウサイズによってスタイルを変えたり。 JavaScriptで動的にスタイルシートを切り替えたい時用に ちょこざいなやつを備忘録としてまとめておきます。 1. 条件でス [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>例えばブラウザによってスタイルを追加したり、<br />
ウィンドウサイズによってスタイルを変えたり。<br />
JavaScriptで動的にスタイルシートを切り替えたい時用に<br />
ちょこざいなやつを備忘録としてまとめておきます。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh6.ggpht.com/_JJkNs5Ixl70/TCixoQ_krrI/AAAAAAAAA9U/gL3HEXYJGfU/s800/201006282327.png" alt="スタイルシート切替小技"/></figure>



<p></p>



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



<ol class="wp-block-list">
<li><a href="#add-style">条件でスタイルシートを追加する</a></li>



<li><a href="#toggle-style">条件でスタイルシートを切り替える</a></li>



<li><a href="#toggle-by-winsize">ウィンドウサイズでスタイルを切り替える</a></li>
</ol>



<h2 class="wp-block-heading" id="add-style">1. 条件でスタイルシートを追加する</h2>


<pre class="wp-block-code"><span><code class="hljs language-javascript">(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"> config, once </span>)</span>{
    <span class="hljs-keyword">var</span> styledir = $(<span class="hljs-string">"link&#91;rel=stylesheet]:last"</span>).attr(<span class="hljs-string">"href"</span>).replace(<span class="hljs-regexp">/&#91;^\/]+?$/</span>,<span class="hljs-string">""</span>),
        i = config.length,
        c;

    <span class="hljs-keyword">while</span>(i--){
        c = config&#91;config.length - i - <span class="hljs-number">1</span>];
        <span class="hljs-keyword">if</span>( c.rule ){
            $(<span class="hljs-string">"head"</span>)&#91;<span class="hljs-number">0</span>].appendChild(
                $(<span class="hljs-string">"&lt;link /&gt;"</span>)
                .attr({ <span class="hljs-attr">rel</span>:<span class="hljs-string">"stylesheet"</span>, <span class="hljs-attr">type</span>:<span class="hljs-string">"text/css"</span>, <span class="hljs-attr">href</span>: styledir + c.css })&#91;<span class="hljs-number">0</span>]
            );
            <span class="hljs-keyword">if</span>( once ){ <span class="hljs-keyword">break</span>; }
        }
    }
})( &#91;
    { <span class="hljs-attr">rule</span>:( <span class="hljs-keyword">typeof</span>(<span class="hljs-built_in">document</span>.documentElement.style.maxHeight) === <span class="hljs-string">"undefined"</span> ), <span class="hljs-attr">css</span>:<span class="hljs-string">"ie6.css"</span> },
    { <span class="hljs-attr">rule</span>:( location.href.match( <span class="hljs-string">"/the/path/to/test.html"</span> ) ), <span class="hljs-attr">css</span>:<span class="hljs-string">"some.css"</span> }
], <span class="hljs-literal">true</span> );
</code></span></pre>


<p>第一引数のconfigは、設定用のオブジェクトリテラルが列挙された配列、<br />
第二引数のonceは、一度条件に合致した場合にループを抜けるかどうかのboolean。<br />
config[n].ruleにtrueが格納されている場合に、config[n].cssへのリンク要素を追加します。</p>



<p>スタイルシートへのパスは、head要素内の最後のLink要素から<br />
ディレクトリを抜き取っています。（styledir）</p>



<p>jQueryを使っておきながらappendTo等の便利なメソッドを使っていないのは、<br />
link要素のappendがIEで上手く動作しなかったためです。<br />
cf) <a href="https://blog.mach3.jp/2010/03/js-jquerylinkappend.html">JS備忘録: jQueryでlink要素をappendしたかった</a></p>



<h2 class="wp-block-heading" id="toggle-style">2. 条件でスタイルシートを切り替える</h2>



<p>今度は追加ではなく、idをふったlink要素のhrefを差し替えます。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">"stylesheet"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/css"</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"hogehoge.css"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"mystyle"</span> /&gt;</span>
</code></span></pre>


<p>JavaScript</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"> id, config, once </span>)</span>{
    <span class="hljs-keyword">var</span> styleobj = $(<span class="hljs-string">"#"</span>+id),
        cssdir = styleobj.attr(<span class="hljs-string">"href"</span>).replace(<span class="hljs-regexp">/&#91;^\/]+?$/</span>,<span class="hljs-string">""</span>),
        i = config.length,
        c;

    <span class="hljs-keyword">while</span>(i--){
        c = config&#91; config.length - i - <span class="hljs-number">1</span> ];
        <span class="hljs-keyword">if</span>( c ){
            styleobj.attr( <span class="hljs-string">"href"</span>, cssdir + c.css );
            <span class="hljs-keyword">if</span>( once ){ <span class="hljs-keyword">break</span>; }
        }
    }
})( <span class="hljs-string">"mystyle"</span>, &#91;
    { <span class="hljs-attr">rule</span>: val_a, <span class="hljs-attr">css</span>: <span class="hljs-string">"style-a.css"</span> },
    { <span class="hljs-attr">rule</span>: val_b, <span class="hljs-attr">css</span>: <span class="hljs-string">"style-b.css"</span> }
], <span class="hljs-literal">false</span> );
</code></span></pre>


<p>第一引数でlink要素のidを受け取るようにしています。<br />
残りの引数は1.と同様です。（値は手抜きですが）</p>



<h2 class="wp-block-heading" id="toggle-by-winsize">3. ウィンドウサイズでスタイルを切り替える</h2>



<p>ちょっと前にそんな記事を読んだ気がしたので、2.を応用してやってみました。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">"stylesheet"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/css"</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"style-a.css"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"mystyle"</span> /&gt;</span>
</code></span></pre>


<p>JavaScript</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"> id, config, once </span>)</span>{
    <span class="hljs-keyword">var</span> styleobj = $(<span class="hljs-string">"#"</span> + id),
        styledir = styleobj.attr(<span class="hljs-string">"href"</span>).replace(<span class="hljs-regexp">/&#91;^\/]+?$/</span>,<span class="hljs-string">""</span>),
        switchStyle;

    switchStyle = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
        <span class="hljs-keyword">var</span> i = config.length,
            w = <span class="hljs-built_in">String</span>($(e.target).width()),
            c;

        <span class="hljs-keyword">while</span>(i--){
            c = config&#91; config.length - i - <span class="hljs-number">1</span> ]
            <span class="hljs-keyword">if</span>( <span class="hljs-built_in">eval</span>( w + c.rule ) ){
                styleobj.attr( <span class="hljs-string">"href"</span>, styledir + c.css );
                <span class="hljs-keyword">if</span>( once ){ <span class="hljs-keyword">break</span>; }
            }
        }
    }

    $(<span class="hljs-built_in">window</span>).bind(<span class="hljs-string">"load"</span>, switchStyle );
    $(<span class="hljs-built_in">window</span>).bind(<span class="hljs-string">"resize"</span>, switchStyle );

})( <span class="hljs-string">"mystyle"</span>, &#91;
    { <span class="hljs-attr">rule</span>: <span class="hljs-string">"&gt;= 640"</span>, <span class="hljs-attr">css</span>: <span class="hljs-string">"style-a.css"</span> },
    { <span class="hljs-attr">rule</span>: <span class="hljs-string">"&lt; 640"</span>, <span class="hljs-attr">css</span>: <span class="hljs-string">"style-b.css"</span> }
], <span class="hljs-literal">true</span> );
</code></span></pre>


<p>1,2と違って、config[n].rule には左辺にウィンドウの幅をとる数式を文字列で指定しています。<br />
あとは概ね2と同じ感じですね。</p>



<p>もう少し公開に適した形はあるとは思うのですが、<br />
なにせ「ライブラリの在処より作り方を覚えておこう」というのがモットーの為…</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>AS3実験室: 画像を読み込んでボタンにする～SimpleButtonの巻</title>
		<link>https://blog.mach3.jp/2010/05/03/as3-simplebutton-with-bitmap.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 03 May 2010 21:56:00 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Bitmap]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[SimpleButton]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/05/03/as3%e5%ae%9f%e9%a8%93%e5%ae%a4-%e7%94%bb%e5%83%8f%e3%82%92%e8%aa%ad%e3%81%bf%e8%be%bc%e3%82%93%e3%81%a7%e3%83%9c%e3%82%bf%e3%83%b3%e3%81%ab%e3%81%99%e3%82%8b%ef%bd%9esimplebutton%e3%81%ae%e5%b7%bb.html</guid>

					<description><![CDATA[AS3実験室: 画像を読み込んでボタンにするを書いたあとに気付いたのですが、 SimpleButtonという便利なクラスが存在しておりまして、 これを使った方がより簡単にボタン化出来るので、フォローとしてログっておきます [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="/2010/05/as3-bitmapbutton.html">AS3実験室: 画像を読み込んでボタンにする</a>を書いたあとに気付いたのですが、<br />
SimpleButtonという便利なクラスが存在しておりまして、<br />
これを使った方がより簡単にボタン化出来るので、フォローとしてログっておきます。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh4.ggpht.com/_JJkNs5Ixl70/S97GN4U-B4I/AAAAAAAAA4A/kJzsGboyxdg/s800/201005032149.png" alt="SimpleButton"/></figure>



<p></p>



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



<p>途中までは前記事と似たような処理なのでちょっと割愛してるところもあるのでご注意。</p>



<h2 class="wp-block-heading">1. 画像の読み込み</h2>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">private</span> <span class="hljs-keyword">var</span> bl:BulkLoader = <span class="hljs-keyword">new</span> BulkLoader(<span class="hljs-string">"imageloader"</span>);

<span class="hljs-comment">/* 中略 */</span>

bl.add( <span class="hljs-string">"images/button_normal.png"</span> );
bl.add( <span class="hljs-string">"images/button_over.png"</span> );
bl.add( <span class="hljs-string">"images/button_down.png"</span> );
bl.addEventListener( BulkProgressEvent.COMPLETE, initialize );
bl.start();
</code></span></pre>


<h2 class="wp-block-heading">2. SimpleButtonをつくる</h2>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> btn:SimpleButton = <span class="hljs-keyword">new</span> SimpleButton(
    <span class="hljs-keyword">new</span> Bitmap(bl.getBitmapData(<span class="hljs-string">"images/button_normal.png"</span>)),
    <span class="hljs-keyword">new</span> Bitmap(bl.getBitmapData(<span class="hljs-string">"images/button_over.png"</span>)),
    <span class="hljs-keyword">new</span> Bitmap(bl.getBitmapData(<span class="hljs-string">"images/button_down.png"</span>)),
    <span class="hljs-keyword">new</span> Bitmap(bl.getBitmapData(<span class="hljs-string">"images/button_normal.png"</span>))
);
addChild(btn);
</code></span></pre>


<p><a href="http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/display/SimpleButton.html">SimpleButton &#8211; ActionScript 3.0</a></p>



<p>使い方は上記リンク参照。余計なもの（!?）をimportしなくていい分心地よいです。</p>



<p>ただし、このままでは<a href="/2010/05/as3-bitmapbutton.html">BitmapButton</a>にはあった「選択時」の状態が使用できません。<br />
この点は今頭を悩ましているところですね。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<dl>
<dt>2010/05/17</dt>
<dd>さすがに端折りすぎたのでコードを追記</dd>
<dt>2010/05/24</dt>
<dd>フォロー記事書きました。<br />
<a href="/2010/05/as3-simpletogglebutton.html">AS3実験室: SimpleButtonクラスをトグル出来るように拡張した「SimpleToggleButton」</a></dd>
</dl>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ナビゲーションの現在地をアクティブにするJS小技</title>
		<link>https://blog.mach3.jp/2010/04/23/js-activate-navigation.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Fri, 23 Apr 2010 21:55:00 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Navigation]]></category>
		<category><![CDATA[UI]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/04/23/%e3%83%8a%e3%83%93%e3%82%b2%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e7%8f%be%e5%9c%a8%e5%9c%b0%e3%82%92%e3%82%a2%e3%82%af%e3%83%86%e3%82%a3%e3%83%96%e3%81%ab%e3%81%99%e3%82%8bjs%e5%b0%8f%e6%8a%80.html</guid>

					<description><![CDATA[わざわざ投稿するほどのものか、というぐらいちょこざいな小技です。 JavaScriptでナビゲーションを操作して、 現在いるディレクトリのナビゲーションに「.active」クラスを付加してみます。 例えばこんなナビゲーシ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>わざわざ投稿するほどのものか、というぐらいちょこざいな小技です。<br />
JavaScriptでナビゲーションを操作して、<br />
現在いるディレクトリのナビゲーションに「.active」クラスを付加してみます。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/S9GYPwo8MbI/AAAAAAAAA2o/_7j_yk_jYa8/s800/201004232122.png" alt="ナビゲーションの現在地をアクティブにする"/></figure>



<p></p>



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



<p>例えばこんなナビゲーションがあるとしますね。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh6.ggpht.com/_JJkNs5Ixl70/S9GYQLKE44I/AAAAAAAAA2s/kvqKPhujwz4/s800/201004232108.png" alt="ナビゲーション"/></figure>



<p></p>



<p>こんなかんじにマークアップされているとしましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">ul</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"navi"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"#"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"navi-home"</span>&gt;</span>HOME<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"#"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"navi-product"</span>&gt;</span>PRODUCTS<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"#"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"navi-about"</span>&gt;</span>ABOUT<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"#"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"navi-blog"</span>&gt;</span>BLOG<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"#"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"navi-contact"</span>&gt;</span>CONTACT<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
</code></span></pre>


<p>アクティブに見せる為の「.active」クラスを用意します。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/S9GYQDLDhPI/AAAAAAAAA2w/rx1rGG1ZkT0/s800/201004232126.png" alt=".activeクラス"/></figure>



<p></p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-id">#navi</span> <span class="hljs-selector-tag">li</span> <span class="hljs-selector-tag">a</span><span class="hljs-selector-class">.active</span> {
    <span class="hljs-comment">/* なんらかのスタイル */</span>
}
</code></span></pre>


<p>仕上げにスクリプトを書きます。jQuery使ってます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> naviConfig = &#91;
    { <span class="hljs-attr">rule</span>:<span class="hljs-string">"/product/"</span>, <span class="hljs-attr">selector</span>:<span class="hljs-string">"#navi-product"</span> },
    { <span class="hljs-attr">rule</span>:<span class="hljs-string">"/about/"</span>, <span class="hljs-attr">selector</span>:<span class="hljs-string">"#navi-about"</span> },
    { <span class="hljs-attr">rule</span>:<span class="hljs-string">"/blog/"</span>, <span class="hljs-attr">selector</span>:<span class="hljs-string">"#navi-blog"</span> },
    { <span class="hljs-attr">rule</span>:<span class="hljs-string">"/contact/"</span>, <span class="hljs-attr">selector</span>:<span class="hljs-string">"#navi-contact"</span> }
];
(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">config</span>)</span>{
    <span class="hljs-keyword">for</span>(<span class="hljs-keyword">var</span> i=<span class="hljs-number">0</span>;i&lt;config.length;i++){
        <span class="hljs-keyword">if</span>( location.href.match(config&#91;i].rule) ){
            $(config&#91;i].selector).addClass(<span class="hljs-string">"active"</span>);
            <span class="hljs-keyword">return</span>;
        }
    }
})( naviConfig );
</code></span></pre>


<p>ご覧の通り、ruleの文字列に現在のURLがマッチした場合に、<br />
selectorにあてはまる要素にactiveクラスを付加しています。<br />
それだけです。</p>



<p>例えば、URLが「http://www.example.com/product/hogehoge.html」等だった場合に、<br />
「/product/」の部分がマッチして#navi-productの要素がアクティブになります。<br />
複雑なルール付けが必要な場合は、ruleに正規表現を使用してもいいですね。</p>



<p>静的にclass=&#8221;active&#8221;を書くのが良いとも言えますが、<br />
Dreamweaverのライブラリや各CMSでモジュール化してあるナビゲーションだと、<br />
条件分岐などが面倒な場合があります。<br />
そんな時はこんな感じにJavaScriptを使ってさっくり処理してしまうのも一手かと。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>いつの間に実装されていたjQuery.proxy等という便利な機能</title>
		<link>https://blog.mach3.jp/2010/04/20/jquery-proxy.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 20 Apr 2010 02:01:00 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/04/20/%e3%81%84%e3%81%a4%e3%81%ae%e9%96%93%e3%81%ab%e5%ae%9f%e8%a3%85%e3%81%95%e3%82%8c%e3%81%a6%e3%81%84%e3%81%9fjquery-proxy%e7%ad%89%e3%81%a8%e3%81%84%e3%81%86%e4%be%bf%e5%88%a9%e3%81%aa%e6%a9%9f.html</guid>

					<description><![CDATA[Mach3: Prototype.jsのbind的なノリのものを書く を一ヶ月ぐらい前に書いたばかりですが、いつのまにかjQueryでも同様の機能が実装されておりました。 1.4出てからもう3ヶ月ぐらい経つと言うのに…  [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="/2010/03/prototypejs-bind.html">Mach3: Prototype.jsのbind的なノリのものを書く</a><br />
を一ヶ月ぐらい前に書いたばかりですが、いつのまにかjQueryでも同様の機能が実装されておりました。<br />
1.4出てからもう3ヶ月ぐらい経つと言うのに…</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh6.ggpht.com/_JJkNs5Ixl70/S8yMK0xGQ-I/AAAAAAAAA2g/DP5poCM1kaM/s800/201004200156.png" alt="$.proxy"/></figure>



<p></p>



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



<h2 class="wp-block-heading">jQuery.proxy</h2>



<p><a href="http://api.jquery.com/jQuery.proxy/">jQuery.proxy() – jQuery API</a></p>



<h3 class="wp-block-heading">jQuery.proxy( function, context )</h3>



<dl>
<dt>function</dt>
<dd>文脈を変えたいfunction</dd>
<dt>context</dt>
<dd>functionでthisとして扱いたいオブジェクト</dd>
</dl>



<p>つまりはイベントハンドラ等にfunctionを渡すとき、<br />
そのfunction内で使うthisをあるオブジェクトに固定しておきたいときに使います。</p>



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



<p><a href="http://jsbin.com/utile3">DEMO (on JSbin)</a></p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"button"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"Normal"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"normalButton"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"normalButton"</span> /&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"button"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"With Proxy"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"proxyButton"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"proxyButton"</span> /&gt;</span>

<span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/javascript"</span>&gt;</span><span class="javascript">
<span class="hljs-keyword">var</span> TestObj = {
    <span class="hljs-attr">name</span>:<span class="hljs-string">"John"</span>,
    <span class="hljs-attr">func</span>:<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        alert(<span class="hljs-keyword">this</span>.name);
    }
};
$(<span class="hljs-string">"#normalButton"</span>).bind(<span class="hljs-string">"click"</span>, TestObj.func); <span class="hljs-comment">// "normalButton"</span>
$(<span class="hljs-string">"#proxyButton"</span>).bind(<span class="hljs-string">"click"</span>, $.proxy( TestObj.func, TestObj ) ); <span class="hljs-comment">// "John"​</span>
</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>Prototype.jsの場合は、functionを拡張した形で実装されていた覚えが。</p>



<p><a href="http://jsbin.com/idije">DEMO (on JSbin)</a></p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"button"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"normalButton"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"normalButton"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"Normal"</span> /&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"button"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"bindButton"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"bindButton"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"With Bind"</span> /&gt;</span>

<span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/javascript"</span>&gt;</span><span class="javascript">
<span class="hljs-keyword">var</span> MyObj = {
    <span class="hljs-attr">name</span>:<span class="hljs-string">"John"</span>,
    <span class="hljs-attr">func</span>:<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        alert(<span class="hljs-keyword">this</span>.name);
    }
};
$(<span class="hljs-string">"normalButton"</span>).observe( <span class="hljs-string">"click"</span>, MyObj.func ); <span class="hljs-comment">// "normalButton"</span>
$(<span class="hljs-string">"bindButton"</span>).observe( <span class="hljs-string">"click"</span>, MyObj.func.bind(MyObj) ); <span class="hljs-comment">// "John"</span>
</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>こんな感じですね。この形も使いやすくて好きなのですが、<br />
乗り換えた時期は猫も杓子もjQueryなご時世だったもので。</p>



<p>検索から「bind的なノリの～」に飛んできた人に申し訳なく、<br />
フォローのつもりでここにログっておきます。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CSSのセレクタを点数で理解するTips</title>
		<link>https://blog.mach3.jp/2010/04/15/css-selectors-point-tips.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Thu, 15 Apr 2010 20:47:00 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[WebClip]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Video]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/04/15/css%e3%81%ae%e3%82%bb%e3%83%ac%e3%82%af%e3%82%bf%e3%82%92%e7%82%b9%e6%95%b0%e3%81%a7%e7%90%86%e8%a7%a3%e3%81%99%e3%82%8btips.html</guid>

					<description><![CDATA[Quick Tip: Understanding CSS Specificity &#124; Nettuts+ CSSのセレクタがどのように上書きされていくのかを理解する為の、 ポイント制を導入したちょっとしたTipsです。 C [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="http://net.tutsplus.com/tutorials/html-css-techniques/quick-tip-understanding-css-specificity/">Quick Tip: Understanding CSS Specificity | Nettuts+</a></p>



<p>CSSのセレクタがどのように上書きされていくのかを理解する為の、<br />
ポイント制を導入したちょっとしたTipsです。</p>



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



<h2 class="wp-block-heading">CSSセレクタの点数計算法</h2>



<p><iframe width="590" height="443" src="//www.youtube.com/embed/In78mSOHmls?rel=0" frameborder="0" allowfullscreen=""></iframe></p>



<p>（どうでもいいけどタイポ多くてなごみました。）</p>



<p>CSSのセレクタを次のように計算する考え方ですね。</p>



<ul class="wp-block-list">
<li>HTML要素 : 1点</li>



<li>クラス : 10点</li>



<li>ID : 100点</li>
</ul>



<p>引用元の記事から例を拝借しますが、</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-id">#test</span> { <span class="hljs-attribute">background</span>: red; } <span class="hljs-comment">/* specificity : 100 */</span>
<span class="hljs-selector-class">.item</span> <span class="hljs-selector-tag">p</span> { <span class="hljs-attribute">background</span>: green; } <span class="hljs-comment">/* specificity : 10 + 1 = 11 */</span>
<span class="hljs-selector-tag">p</span> { <span class="hljs-attribute">background</span>: orange; } <span class="hljs-comment">/* specificity : 1  */</span>
<span class="hljs-selector-tag">body</span> <span class="hljs-selector-id">#wrap</span> <span class="hljs-selector-tag">p</span> { <span class="hljs-attribute">background</span>: yellow; } <span class="hljs-comment">/* specificity : 1 + 100 + 1 = 102 */</span>
</code></span></pre>


<p>このように計算して点数が高いほうが適用される（であろう）、というわけです。<br />
それぞれのセレクタがどの程度の影響力を持っているか知っていると<br />
コーディングの助けになりそうですね。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<dl>
<dt>2010/04/20</dt>
<dd>上記のリンク先を読むとかいてありますが、<br />
インライン要素は1000点とされているらしいです。</dd>
</dl>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">他の計算方法</h2>



<p>似たような計算方法で、</p>



<ul class="wp-block-list">
<li>a = もしインライン指定ならば1</li>



<li>b = IDの数</li>



<li>c = 属性セレクタ/クラス/擬似クラスの数</li>



<li>d = HTML要素の数</li>
</ul>



<p>として、</p>



<dl>
<dt>&lt;p style=&#8221;color:#000000;&#8221;&gt;</dt>
<dd>a=1, b=0, c=0, d=0 → 1000</dd>
<dt>&#8220;footer nav li:last-child&#8221;</dt>
<dd>a=0, b=0, c=1, d=3 → 0013</dd>
<dt>&#8220;# sidebar input:not([type=&#8221;submit&#8221;])&#8221;</dt>
<dd>a=0, b=1, c=1, d=1 → 0111</dd>
</dl>



<p>このように点数を作り上げる方法もあるみたいですね。<br />
cf) <a href="http://www.smashingmagazine.com/2010/04/07/css-specificity-and-inheritance/">CSS Specificity And Inheritance &#8211; Smashing Magazine</a></p>



<h2 class="wp-block-heading">余談</h2>



<p>（であろう）とつけておいたのは、<br />
ただ単純に計算式の通りになるというわけではなく、<br />
他の要因も絡んでくるという事。<br />
極端な馬鹿げた例で大変恐縮なのですが</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-class">.mylink</span> {
    <span class="hljs-attribute">color</span>:red;
}
<span class="hljs-selector-tag">body</span> <span class="hljs-selector-tag">div</span> <span class="hljs-selector-tag">div</span> <span class="hljs-selector-tag">div</span> <span class="hljs-selector-tag">div</span> <span class="hljs-selector-tag">div</span> <span class="hljs-selector-tag">div</span> <span class="hljs-selector-tag">ul</span> <span class="hljs-selector-tag">li</span> <span class="hljs-selector-tag">span</span> <span class="hljs-selector-tag">a</span> {
    <span class="hljs-attribute">color</span>: blue;
}
</code></span></pre>


<p>前者はクラスで10点、後者はHTML要素*11=11点。<br />
ですが、リンクの色は赤になります。（本当に馬鹿げた例だ！）</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>実験室: jsファイルを動的にロードするライブラリ</title>
		<link>https://blog.mach3.jp/2010/03/22/jsloader-js.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 22 Mar 2010 20:29:00 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Library]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/03/22/%e5%ae%9f%e9%a8%93%e5%ae%a4-js%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92%e5%8b%95%e7%9a%84%e3%81%ab%e3%83%ad%e3%83%bc%e3%83%89%e3%81%99%e3%82%8b%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa.html</guid>

					<description><![CDATA[この記事の情報は古くなっています。 Require.js や head.js のコードを参考にしてください。 JavaScriptの動的ロードと言えば、「RequireJS」が公開されています。 cf) 外部jsを読み込 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="caution">
    この記事の情報は古くなっています。<br />
    Require.js や head.js のコードを参考にしてください。
</p>



<p>JavaScriptの動的ロードと言えば、「<a href="http://requirejs.org/">RequireJS</a>」が公開されています。<br />
cf) <a href="http://blog.verygoodtown.com/2010/03/javascript-load-lib-requirejs/">外部jsを読み込む事ができるJavaScriptライブラリ「RequireJS」 | Web活メモ帳</a></p>



<p>たまたま自分が書いていたのと同じような内容で、オッと思いましたが<br />
せっかく書いてしまったものなのでメモっておきます。</p>



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


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> jsLoader = {
    <span class="hljs-attr">length</span>:<span class="hljs-literal">null</span>,
    <span class="hljs-attr">callback</span>:<span class="hljs-literal">null</span>,
    <span class="hljs-attr">init</span>:<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">list,callback</span>)</span>{
        <span class="hljs-keyword">this</span>.length = list.length;
        <span class="hljs-keyword">this</span>.callback = callback;
        <span class="hljs-keyword">while</span>(url=list.shift()){ <span class="hljs-keyword">this</span>.load(url); }
    },
    <span class="hljs-attr">load</span>:<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">url</span>)</span>{
        <span class="hljs-keyword">if</span>(!<span class="hljs-keyword">this</span>.findobj(url)){
            <span class="hljs-keyword">var</span> ele = <span class="hljs-built_in">document</span>.createElement(<span class="hljs-string">"script"</span>);
            <span class="hljs-keyword">var</span> _this = <span class="hljs-keyword">this</span>;
            ele.src = url;
            ele.onload = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
                _this.onloaded();
            };
            ele.onreadystatechange = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
                <span class="hljs-keyword">if</span>(<span class="hljs-keyword">this</span>.readyState==<span class="hljs-string">"loaded"</span>||<span class="hljs-keyword">this</span>.readyState==<span class="hljs-string">"complete"</span>){
                    _this.onloaded();
                }
            };
            <span class="hljs-built_in">document</span>.body.appendChild(ele);
        }
    },
    <span class="hljs-attr">onloaded</span>:<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-keyword">this</span>.length --;
        <span class="hljs-keyword">if</span>(!<span class="hljs-keyword">this</span>.length) <span class="hljs-keyword">this</span>.callback();
    },
    <span class="hljs-attr">findobj</span>:<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">url</span>)</span>{
        <span class="hljs-keyword">var</span> eles = <span class="hljs-built_in">document</span>.getElementsByTagName(<span class="hljs-string">"script"</span>);
        <span class="hljs-keyword">for</span>(i <span class="hljs-keyword">in</span> eles){
            <span class="hljs-keyword">if</span>(eles&#91;i].src==url){
                <span class="hljs-keyword">this</span>.onloaded();
                <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
            }
        }
        <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
    }
};
</code></span></pre>


<p>RequireJSとかなーりボリュームが異なりますね…<br />
必要最低限な感じで、色々不足している処理がありそうで怖い。<br />
使い方は奇しくもRequireJSと同じ。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">jsLoader.init(&#91;
    <span class="hljs-string">"jquery.js"</span>,
    <span class="hljs-string">"jquery-ui.js"</span>,
], <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-comment">//do something</span>
});
</code></span></pre>


<p>第一引数にはロードしたいjsファイルのURLを配列で、<br />
第二引数にはコールバック関数を渡します。<br />
コールバックはjsファイルのロードが全て完了した時に呼ばれます。</p>



<p>暇があったらRequireJSのソースも読んでみるとします。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
