<?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/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>1：n - DETELU Blog &#187; jQuery</title>
	<atom:link href="http://www.detelu.com/blog/category/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.detelu.com/blog</link>
	<description>ホームページ作成に関する話題を中心に気ままにつづるブログです。</description>
	<lastBuildDate>Thu, 09 Feb 2012 07:04:41 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.detelu.com/blog/category/jquery/feed/" />
		<item>
		<title>jquery.fadeMoverプラグインページを作成しました。</title>
		<link>http://www.detelu.com/blog/2012/02/jquery-fademover-plugin/</link>
		<comments>http://www.detelu.com/blog/2012/02/jquery-fademover-plugin/#comments</comments>
		<pubDate>Mon, 06 Feb 2012 14:44:13 +0000</pubDate>
		<dc:creator>DETELU</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[プラグイン]]></category>

		<guid isPermaLink="false">http://www.detelu.com/blog/?p=940</guid>
		<description><![CDATA[以前のjquery.fadeMoverプラグインの記事に不具合があった（というよりも単なるミスです。。。申し訳ないです。。。）ので、ちょっと機能アップを含め、別途ページを作成しました。 jquery.fadeMover  [...]]]></description>
			<content:encoded><![CDATA[<p>
以前のjquery.fadeMoverプラグインの記事に不具合があった（というよりも単なるミスです。。。申し訳ないです。。。）ので、ちょっと機能アップを含め、別途ページを作成しました。<br />
<br />
<a href="">jquery.fadeMover &#8211; Fadein and Fadeout for jQuery</a><br />
<br />
要素が複数あった場合に順番に処理する、という機能を新しくオプションでつけています。下記にデモページがあるんですが、ページ少し下の方にある「Box」と書かれている場所がぱらぱらとフェードインする、フェードアウトする感じになります。<br />
<br />
<a href="http://www.detelu.com/fademover/demo4.html">jquery.fadeMover &#8211; demo4 順番にフェードイン</a><br />
<a href="http://www.detelu.com/fademover/demo5.html">jquery.fadeMover &#8211; demo5 順番にフェードアウト</a><br />
<br />
デモがわかりやすいように実行時間を長めに設定してるのでじれったい感じかもですが、もし利用の機会があれば、ご自身でスピードを変更して、いろいろ試してみてください。<br />
<br />
<br />
あとページ読み込み時に全部表示されてからフェードインが実行されるのをなんとかしたい、という相談をいただいたんですが、Tipとして解決方法を掲載しています。もしお悩みの方がいらっしゃいましたら、下記「Tips」をお試しください。多少ましになるはずです。<br />
<br />
<a href="http://www.detelu.com/fademover/#tips">jquery.fadeMover  Tips</a><br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.detelu.com/blog/2012/02/jquery-fademover-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.detelu.com/blog/2012/02/jquery-fademover-plugin/" />
	</item>
		<item>
		<title>jQuery &#8211; メニューをスクロールに付随させてみる</title>
		<link>http://www.detelu.com/blog/2011/12/jquery-menu-float-box/</link>
		<comments>http://www.detelu.com/blog/2011/12/jquery-menu-float-box/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 00:56:07 +0000</pubDate>
		<dc:creator>DETELU</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[テンプレート&スニペット]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[スニペット]]></category>

		<guid isPermaLink="false">http://www.detelu.com/blog/?p=753</guid>
		<description><![CDATA[最近国内のサイトでもちょくちょく目にするようになった「スクロールに付随するメニュー（「ユニクロ 特集／+J FINAL COLLECTION &#124; MEN &#8211; ユニクロオンラインストア[store.uniqlo [...]]]></description>
			<content:encoded><![CDATA[<p>
最近国内のサイトでもちょくちょく目にするようになった「スクロールに付随するメニュー（「<a href="http://store.uniqlo.com/jp/store/feature/plusJ/men/">ユニクロ 特集／+J FINAL COLLECTION | MEN &#8211; ユニクロオンラインストア[store.uniqlo.com]</a>」のページの少し下の方にあるメニュー一覧のような動きになるもの 2011年12月2日時点）」を実装してみます。<br />
<br />
この実装はすごく簡単で、スクロール位置と固定する要素の位置を比べ、スタイルを書き換えるだけです。<br />
<br />
<a href="http://detelu.com/blog/sample/jQuery/floatbox/">jQuery メニューをスクロールに付随させてみるサンプル（headerFixedBoxを固定）</a><br />
<a href="http://detelu.com/blog/sample/jQuery/floatbox/index2.html">jQuery メニューをスクロールに付随させてみるサンプル（asideFixedBoxを固定）</a><br />
<br />
サイドバーに固定要素を置く場合は、フッターにかぶってしまうことがあると思うので、それを回避するように条件を加えてみました。<br />
<br />
<pre class="brush: jscript;">
$(function(){
floatBox(&quot;#headerFixedBox&quot;);
floatBox(&quot;#asideFixedBox&quot;, 1);

//ele=固定する要素、flag=サイドバーに固定する要素があり、フッターにかぶらないようにする場合に「1」を指定
function floatBox(ele, flag) {
	//固定する要素を取得
	var box = $(ele);
	//固定する要素の位置を取得
	var fixed_box_offset = box.offset();
	//固定する要素のサイズを取得
	var box_size = {&quot;width&quot;: box.width(), &quot;height&quot;:  box.height()};
	//フッター要素の位置を取得
	var footer_box_offset = $(&quot;#footer&quot;).offset();
	//スクロールイベントが発生したら実行
	$(window).scroll(function() {
		//スクロール位置を取得
		var scroll_val = $(this).scrollTop();
		//固定する要素の位置よりスクロール位置が大きくなれば...
		if(scroll_val &gt; fixed_box_offset.top) {
			//固定する要素にtop:0が指定されていなければ...
			if(box.css(&quot;top&quot;) != 0) {
				//スタイルを追加
				box.css({
					&quot;position&quot;: &quot;fixed&quot;,
					&quot;z-index&quot;: 999,
					&quot;width&quot;: box_size.width,
					&quot;height&quot;: box_size.height,
					&quot;top&quot;: 0,
					&quot;bottom&quot;: &quot;auto&quot;
				});
			}
			//フッターがあり、横メニューがかぶらないようにする場合は...
			if(flag == 1) {
				//フッターの位置よりスクロール位置が大きくなれば...
				if(scroll_val &gt; (footer_box_offset.top - box_size.height)) {
					//スタイルを追加
					if(box.css(&quot;bottom&quot;) != 0) {
						box.css({
							&quot;position&quot;: &quot;absolute&quot;,
							&quot;z-index&quot;: 999,
							&quot;width&quot;: box_size.width,
							&quot;height&quot;: box_size.height,
							&quot;top&quot;: &quot;auto&quot;,
							&quot;bottom&quot;: 0
						});
					}
				}
			}
		//固定する要素の位置よりスクロール位置が小さければ...
		} else {
			//固定する要素のstyle属性を削除
			box.removeAttr(&quot;style&quot;);
		}
	});
}
});
</pre>
<br />
あとは固定する要素の位置を取得するための、もととなる要素のCSSに「position: relative;」を指定します。<br />
<br />
<pre class="brush: css;">
/*
#headerFixedBoxのもととなる要素
*/
#wrap {
	position: relative;
	margin: 0 auto;
	width: 900px;
}
/*
#asideFixedBoxのもととなる要素
*/
#aside {
	position: relative;
	float: right;
	width: 280px;
	min-height: 1600px;
	background: #111;
	color: #eee;
}
</pre>
<br />
と、これでスクロールしてもついてくるメニューの完成です。<br />
<br />
コピペですぐ使えるように関数化しているのですが、関数内にフッター要素のIDを直接していしている箇所があります。もし利用される場合は、関数内の「#footer」のところを、ご自身のサイトのフッターに割り当てているIDに変更してください。<br />
<br />
<pre class="brush: jscript;">
	//フッター要素の位置を取得
	var footer_box_offset = $(&quot;ここを書き換え&quot;).offset();
</pre>
<br />
<br />
今回はスクロールしてもついてくるメニューということで簡単なものをつくりましたが、これを元にして、ある一定箇所までスクロールしたら要素を表示させる、といったこともできます。<br />
<br />
ソースをいじってテストできるようにJS Binにも置いておきました。いろいろ確認してみたい方はどーぞ。<br />
<br />
<a href="http://jsbin.com/avirov/edit#javascript,html,live">JS Bin ソース確認用</a><br />
<br />
<br />
<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.detelu.com/blog/2011/12/jquery-menu-float-box/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.detelu.com/blog/2011/12/jquery-menu-float-box/" />
	</item>
		<item>
		<title>jQuery ちょっと高速化に挑戦してみる</title>
		<link>http://www.detelu.com/blog/2011/11/jquery-tuning/</link>
		<comments>http://www.detelu.com/blog/2011/11/jquery-tuning/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 00:31:20 +0000</pubDate>
		<dc:creator>DETELU</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.detelu.com/blog/?p=715</guid>
		<description><![CDATA[jQueryを使っていると「なんだかもっさりするな。。。」と思う場合があります。こういう場合、書き方を見直す事で、かなり改善する場合があります。今回は「ちょっと高速化」を目標に書き方のポイントを紹介してきます。 ■ 要素 [...]]]></description>
			<content:encoded><![CDATA[<p>
jQueryを使っていると「なんだかもっさりするな。。。」と思う場合があります。こういう場合、書き方を見直す事で、かなり改善する場合があります。今回は「ちょっと高速化」を目標に書き方のポイントを紹介してきます。<br />
<br />
<h3>■ 要素選択の記述を見直す</h3>
<br />
jQueryはセレクタやトラバースメソッドを使って要素を選択しますが、書き方によって大幅にパフォーマンスが上がる場合があります。<br />
<br />
下記HTMLの中の「※ ここを見つける ※」というテキストを「■■■ 書き換えたよ ■■■」に入れ替えたい場合、どう書きますか？<br />
<br />
<pre class="brush: xml;">
&lt;script&gt;
$(function(){
	○○○.text(&quot;■■■ 書き換えたよ ■■■&quot;);
});
&lt;/script&gt;

&lt;div id=&quot;wrap&quot;&gt;
	&lt;div id=&quot;content&quot;&gt;
	&lt;h1&gt;タイトル&lt;/h1&gt;
	&lt;p class=&quot;text&quot;&gt;テキスト..................&lt;/p&gt;
	&lt;div class=&quot;text&quot;&gt;※ ここを見つける ※&lt;/div&gt;
	&lt;div class=&quot;text&quot;&gt;テキスト..................&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;
</pre>
<br />
テキストの書き換えは「.text(&#8220;■■■ 書き換えたよ ■■■&#8221;)」で書き換えることができます。その前の要素を選択するところ(○○○)を考えて見て下さい。<br />
<br />
おそらく人によって書き方がかわってくると思います。思いつくものを、ざっと下記に上げてみました。<br />
<br />
<pre class="brush: jscript;">
&lt;script&gt;
$(function(){
	$(&quot;p + div&quot;).text(&quot;■■■ 書き換えたよ ■■■&quot;); //0.679秒
	$(&quot;p&quot;).next().text(&quot;■■■ 書き換えたよ ■■■&quot;); //0.693秒
	$(&quot;#content&quot;).find(&quot;div&quot;).first().text(&quot;■■■ 書き換えたよ ■■■&quot;); //0.746秒
	$(&quot;#content div&quot;).eq(0).text(&quot;■■■ 書き換えたよ ■■■&quot;); //0.767秒
	$(&quot;div.text&quot;).first().text(&quot;■■■ 書き換えたよ ■■■&quot;); //0.762秒
	$(&quot;#content div&quot;).first().text(&quot;■■■ 書き換えたよ ■■■&quot;); //0.778秒
	$(&quot;p&quot;).next(&quot;div&quot;).text(&quot;■■■ 書き換えたよ ■■■&quot;); //0.808秒
	$(&quot;div#content&quot;).find(&quot;div&quot;).first().text(&quot;■■■ 書き換えたよ ■■■&quot;); //0.945秒
	$(&quot;div.text:contains('※ ここを見つける ※')&quot;).text(&quot;■■■ 書き換えたよ ■■■&quot;); //1.164秒
	$(&quot;div.text:first&quot;).text(&quot;■■■ 書き換えたよ ■■■&quot;); //1.803秒
	$(&quot;.text&quot;).eq(1).text(&quot;■■■ 書き換えたよ ■■■&quot;); //0.697秒
	$(&quot;div.text&quot;).eq(0).text(&quot;■■■ 書き換えたよ ■■■&quot;); //0.753秒
});
&lt;/script&gt;
</pre>
<br />
後ろに添えている「//○○秒」は繰り返し同じ処理をさせたときにかかった時間です（Firefox7で10000回ループでチェック）。上から順番に実行結果の速い順に並べています。一番速いものに比べ、遅いものは3倍近く時間がかかっています。上記の動作確認ページが下記です。<br />
<br />
<a href="http://detelu.com/blog/sample/jQuery/tuning/">jQuery 高速化のための記述テストサンプル</a><br />
<br />
<br />
このように要素取得の書き方の違いだけで、これだけの差がでてきます。では具体的に書き方のポイントを見ていきましょう。<br />
<br />
まず下記2つ。<br />
<br />
<pre class="brush: jscript;">
	$(&quot;div.text:first&quot;).text(&quot;■■■ 書き換えたよ ■■■&quot;); //1.803秒
	$(&quot;#content div:first&quot;).text(&quot;■■■ 書き換えたよ ■■■&quot;); //1.815秒
</pre>
<br />
遅い原因は「:first」です。「一番最初のもの」という指定ですが、かなり実行に時間がかかります。これは「.first()」を使うことでかなり速度が上がります。「:○○」系のものは、実行に時間がかかってしまうものがいくつかあるようなので、代用できるメソッドが用意されている場合は、そちらに書き換えましょう。<br />
<br />
<br />
次に下記を見比べて下さい。<br />
<br />
<pre class="brush: jscript;">
	$(&quot;#content&quot;).find(&quot;div&quot;).first().text(&quot;■■■ 書き換えたよ ■■■&quot;); //0.746秒
	$(&quot;div#content&quot;).find(&quot;div&quot;).first().text(&quot;■■■ 書き換えたよ ■■■&quot;); //0.945秒
</pre>
<br />
違うのはセレクタに「div」を付けているかどうか、というだけです。この記述だけで20%以上速度が変わっています。id属性はページ内に一意（一個だけ）というルールがあるので、HTMLタグを指定する必要はありません。id属性を検索する場合はHTMLタグを付けないようにしましょう。<br />
<br />
「 $(id属性) 」は「 $(HTMLタグ) 」と指定するよりも速度が上がります。もしid属性が割り当てる事ができるのであればHTMLタグにidを割り当て利用してみてください。<br />
<br />
<br />
では次。<br />
<br />
<pre class="brush: jscript;">
	$(&quot;#content&quot;).find(&quot;div&quot;).first().text(&quot;■■■ 書き換えたよ ■■■&quot;); //0.746秒
	$(&quot;#content div&quot;).first().text(&quot;■■■ 書き換えたよ ■■■&quot;); //0.778秒
</pre>
<br />
「$(&#8220;#content&#8221;).find(&#8220;div&#8221;)」「$(&#8220;#content div&#8221;)」はともに「id contentの要素の中のdivを選択」という記述ですが、「find()」を利用した方が少し速くなります。書く時には「$(&#8220;#content div&#8221;)」の方が見やすいので、自分自身こちらを使う事が多いのですが、少しでも速度UPをしたい方は「find()」を使うようにしましょう。<br />
<br />
<br />
次はclass属性の指定について。<br />
<br />
<pre class="brush: jscript;">
	$(&quot;.text&quot;).eq(1).text(&quot;■■■ 書き換えたよ ■■■&quot;); //0.697秒
	$(&quot;div.text&quot;).eq(0).text(&quot;■■■ 書き換えたよ ■■■&quot;); //0.753秒
</pre>
<br />
「class属性を指定する場合はHTMLタグも指定する方が速いよ！」と覚えている方もいるかと思いますが、基本IEのバージョン8以下の場合です。もしスマートフォンのみをターゲットにした場合、HTMLの記述（classの指定箇所やHTMLタグの数）次第では、HTMLタグ指定はない方が速度UPすることがあります。<br />
<br />
と、ここまでをまとめると、<br />
<br />
<strong>・「:○○」系のものは、代用できるメソッドや書き方があれば、そちらを利用する。</strong><br />
<br />
<strong>・ id属性にHTMLタグは付けない。もしHTML側でid属性を付けることができるなら、積極的に利用する。</strong><br />
<br />
<strong>・ find() メソッドは積極的に利用する。</strong><br />
<br />
<strong>・ class属性にHTMLタグを添えるとIEのバージョン8以下では速くなる。それ以外ブラウザの場合はHTMLタグがない方が速度UPの可能性あり。 </strong><br />
<br />
となります。<br />
<br />
<br />
<br />
<h3>■ 繰り返す記述を見直す</h3>
<br />
「繰り返す記述」というのは何回もプログラムを実行する記述箇所です。下記の悪い例、良い例を見比べて下さい。<br />
<br />
【悪い例】<br />
<pre class="brush: jscript;">
	$(&quot;#content&quot;).append(&quot;&lt;p&gt;書き換え済み&lt;/p&gt;&quot;);
	$(&quot;#content&quot;).find(&quot;.text&quot;).css(&quot;color&quot;,&quot;red&quot;);
	$(&quot;#content&quot;).find(&quot;.text&quot;).text(&quot;■■■ 書き換えたよ ■■■&quot;);
</pre>
<br />
【良い例】<br />
<pre class="brush: jscript;">
	var content = $(&quot;#content&quot;);
	var content_text = content.find(&quot;.text&quot;);
	content.append(&quot;&lt;p&gt;書き換え済み&lt;/p&gt;&quot;);
	content_text.css(&quot;color&quot;,&quot;red&quot;).text(&quot;■■■ 書き換えたよ ■■■&quot;);
</pre>
<br />
悪い例では「 $(&#8220;#content&#8221;) 」が3回、「 $(&#8220;#content&#8221;).find(&#8220;.text&#8221;) 」が2回記述されています。「 $(&#8220;&#8230;.&#8221;) 」と記述すると指定された要素を抜き出す処理が実行されます。「 $(&#8220;#content&#8221;) 」が3回記述されているといことは、同じものを3回抜き出す処理が実行されているということです。<br />
<br />
良い例では、抜き出したものを変数に入れ、その後は変数の中身を利用することで、何度も同じ処理を実行しないようにしています。<br />
<br />
また良い例の方では「.css(&#8220;color&#8221;,&#8221;red&#8221;).text(&#8220;&#8230;.&#8221;)」と処理をつなげています。同じ要素に対して複数の処理をしたい場合、「.(ドット)」でつなげて記述することができます（これをメソッドチェーンといいます）。つなげられるものは、つなげて書いてみましょう。<br />
<br />
<br />
次は、やりがちなfor文の中で何度も処理を実行する例です。<br />
<br />
【悪い例】<br />
<pre class="brush: jscript;">
	for(var i=0; i&lt;10; i++){
		$(&quot;#content&quot;).append(&quot;&lt;p&gt;テキストを追加しました。&lt;/p&gt;&quot;);
	}
</pre>
<br />
【良い例】<br />
<pre class="brush: jscript;">
	//new Array() = データを入れる配列を生成
	var add_data = new Array();
	for(var i=0; i&lt;10; i++){
		//.push データを配列に入れる
		add_data.push(&quot;&lt;p&gt;テキストを追加しました。&lt;/p&gt;&quot;);
	}
	//add_data.join('') 配列を結合
	$(&quot;#content&quot;).append(add_data.join(''));
</pre>
<br />
「id content 内に10回コンテンツを追加する」という記述です。<br />
<br />
悪い例では「 $(&#8220;&#8230;.&#8221;) 」「 append(&#8220;&#8230;.&#8221;) 」の2つを10回実行しているので、処理に時間がかかります。これを良い例の方では、それぞれ1回のみ実行するように書き換えています。<br />
<br />
良い例のコメントをつけている部分はjQueryではなく、素のJavascriptの記述です。毎回 append でデータを追加するのではなく、追加するデータを一旦配列に入れ、そのデータをまとめて最後に追加しています。<br />
<br />
もしfor文やwhile文内で append 等で追加している場合は、良い例のようにforの外で追加するよう書き直してみてください。処理速度は数倍、数十倍UPするはずです。<br />
<br />
<br />
上記2つの例のように同じ処理を何度もさせるような書き方をしている場合は、できる限り処理が少なくなるような書き方に直しましょう。<br />
<br />
<br />
<br />
<h3>■ 最後に処理時間の計り方</h3>
<br />
実際に書き直しをすると、どのくらい速くなっているか知りたい！と思うはず。たいしたものではないですが、すぐに計測できるようスクリプトを付けておきます。これを利用して今どれくらい時間がかかっているのか、書き直してどのくらい速くなったか確認してみてください。<br />
<br />
<pre class="brush: jscript;">
&lt;script&gt;
$(function(){
	//繰り返す回数
	var end_count = 1000;
	var start_time = new Date();
	for (var start_count=0; start_count&lt;end_count; start_count++){
		//実行する処理を書く
	}
	var end_time = new Date();
	var msec = (end_time - start_time)/1000;
	alert(&quot;結果：&quot;+ msec +&quot;秒かかりました&quot;);
});
&lt;/script&gt;
</pre>
<br />
<br />
ふう。。。長くなりましたが、以上の書き方を見直せば、ちょっとどころではなく、えっ！と驚く程速くなるかもしれません。ぜひぜひ高速化に挑戦してみてください。<br />
<br />
<br />
※ちなみにjQuery本体はできるだけ新しいものを利用した方が速くなる可能性があります。ですが、プラグインが動作しなくなったり、未知のバグがあったりするので、jQuery本体を差し替える場合は要注意です。しっかり動作確認してから差し替えましょう！<br />
<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.detelu.com/blog/2011/11/jquery-tuning/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.detelu.com/blog/2011/11/jquery-tuning/" />
	</item>
		<item>
		<title>jQuery &#8211; 目的の場所にさくっと要素を追加する</title>
		<link>http://www.detelu.com/blog/2011/11/jquery-manipulation/</link>
		<comments>http://www.detelu.com/blog/2011/11/jquery-manipulation/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 00:32:43 +0000</pubDate>
		<dc:creator>DETELU</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[テンプレート&スニペット]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[スニペット]]></category>

		<guid isPermaLink="false">http://www.detelu.com/blog/?p=699</guid>
		<description><![CDATA[「いろんなセレクタ指定方法＋αを覚えて、目的の要素をさくっと取得する」で要素をさくっと選択できるようになったら、次は選択した要素を元に、さくっと新しく要素を追加する方法を覚えて見ましょう。 「新しく要素を追加する」という [...]]]></description>
			<content:encoded><![CDATA[<p>
「<a href="http://www.detelu.com/blog/2011/11/jquery-selector-traversing/">いろんなセレクタ指定方法＋αを覚えて、目的の要素をさくっと取得する</a>」で要素をさくっと選択できるようになったら、次は選択した要素を元に、さくっと新しく要素を追加する方法を覚えて見ましょう。<br />
<br />
「新しく要素を追加する」というのはAjaxで外部データを読み込み、リスト一覧を表示させる場合などに頻繁に利用します。たとえばtwitterからデータを読み込んでサイドバーに表示する、といった場合です。<br />
<br />
他にもホームページに新しい商品を追加して「NEW」という画像を表示することがあると思いますが、一ヶ月後には消したいという場合、直接HTMLに書き込んでいると、いちいち修正しないといけません。それをうまくJavascriptで追加するようにして上げれば、修正の必要がなくなります。<br />
<br />
class名に日時を添えて、そのclass名につけられた日時と現在の日時と比べて処理をさせます。少しスクリプトは荒い例ですが、下記のような感じです。<br />
<br />
<pre class="brush: xml;">
&lt;script&gt;
$(function(){
	var now = new Date(); //現在の日時を取得
	var h1Class = $(&quot;h1&quot;).attr(&quot;class&quot;); //h1のclassを取得
	var aDate = h1Class.replace(&quot;new&quot;,&quot;&quot;).split(&quot;-&quot;); //取得したclassを整形
	var add_date = new Date(aDate[0], aDate[1], aDate[2]); //Dateオブジェクトに変換
	//もし現在が日時がclassで指定した日時より前なら画像を表示
	if(now &lt; add_date) $(&quot;h1.new2011-12-21&quot;).append('&lt;img src=&quot;new.gif&quot;&gt;');
});
&lt;/script&gt;
&lt;!-- class名に画像の表示年月日を付ける --&gt;
&lt;h1 class=&quot;new2011-12-21&quot;&gt;新色 ふかふか手編みマフラー&lt;/h1&gt;
</pre>
<br />
このように新しく要素を追加する方法を知っておくと、ちょっとしたスクリプトで手間を省く事ができます。<br />
<br />
<br />
新しい要素を追加するといっても、対象の要素の前に追加、中に追加、包み込む、等いろいろなものが用意されています。ではではセレクタのとき同様、動作サンプル&#038;簡易説明書きをチェックしてみてください。<br />
<br />
<a href="http://detelu.com/blog/sample/jQuery/manipulation/">jQuery DOM操作（Manipulation）系メソッド動作サンプル</a><br />
<br />
<br />
<h3>[ DOM操作（Manipulation) ] </h3>
<br />
<b>$(&#8220;div.box&#8221;).after(&#8220;&lt;div&gt;&#8230;&lt;/div&gt;&#8221;)</b><br />
CLASS名 box が指定されたdivタグの後に&lt;div&gt;&#8230;&lt;/div&gt;を追加<br />
<br />
<b>$(&#8220;&lt;div&gt;&#8230;&lt;/div&gt;&#8221;).insertAfter(&#8220;div.box&#8221;)</b><br />
&lt;div&gt;&#8230;&lt;/div&gt;をCLASS名 box が指定されたdivタグの後に追加<br />
<br />
<b>$(&#8220;div.box&#8221;).before(&#8220;&lt;div&gt;&#8230;&lt;/div&gt;&#8221;)</b><br />
CLASS名 box が指定されたdivタグの前に追加<br />
<br />
<b>$(&#8220;&lt;div&gt;&#8230;&lt;/div&gt;&#8221;).insertBefore(&#8220;div.box&#8221;)</b><br />
&lt;div&gt;&#8230;&lt;/div&gt;をCLASS名 box が指定されたdivタグの前に追加<br />
<br />
<b>$(&#8220;div.box&#8221;).append(&#8220;&lt;div&gt;&#8230;&lt;/div&gt;&#8221;)</b><br />
CLASS名 box が指定されたdivタグの子要素の最後に&lt;div&gt;&#8230;&lt;/div&gt;を追加<br />
<br />
<b>$(&#8220;&lt;div&gt;&#8230;&lt;/div&gt;&#8221;).appendTo(&#8220;div.box&#8221;)</b><br />
&lt;div&gt;&#8230;&lt;/div&gt;をCLASS名 box が指定されたdivタグの子要素の最後に追加<br />
<br />
<b>$(&#8220;div.box&#8221;).prepend(&#8220;&lt;div&gt;&#8230;&lt;/div&gt;&#8221;)</b><br />
CLASS名 box が指定されたdivタグの子要素の最初に&lt;div&gt;&#8230;&lt;/div&gt;を追加<br />
<br />
<b>$(&#8220;&lt;div&gt;&#8230;&lt;/div&gt;&#8221;).prependTo(&#8220;div.box&#8221;)</b><br />
&lt;div&gt;&#8230;&lt;/div&gt;をCLASS名 box が指定されたdivタグの子要素の最初に追加<br />
<br />
<b>$(&#8220;div.box&#8221;).wrap(&#8220;&lt;div&gt;&#8230;&lt;/div&gt;&#8221;)</b><br />
CLASS名 box が指定されたdivタグを&lt;div&gt;&#8230;&lt;/div&gt;をで包み込む<br />
(複数ある場合は各それぞれを包み込む)<br />
<br />
<b>$(&#8220;div.box&#8221;).wrapAll(&#8220;&lt;div&gt;&#8230;&lt;/div&gt;&#8221;)</b><br />
CLASS名 box が指定されたdivタグすべてを&lt;div&gt;&#8230;&lt;/div&gt;をで包み込む<br />
(複数ある場合はすべてを一つに包み込む)<br />
<br />
<b>$(&#8220;div.box&#8221;).wrapInner(&#8220;&lt;div&gt;&#8230;&lt;/div&gt;&#8221;)</b><br />
CLASS名 box が指定されたdivタグの子要素を&lt;div&gt;&#8230;&lt;/div&gt;をで包み込む<br />
<br />
<b>$(&#8220;div.box&#8221;).clone().appendTo(&#8220;div.boxA&#8221;)</b><br />
「$(&#8220;div.box&#8221;).clone()」でCLASS名 box が指定されたdivタグを複製<br />
「appendTo(&#8220;div.boxA&#8221;)」で複製したものを、CLASS名 boxA が指定されたdivタグの子要素の最後に追加<br />
<br />
<b>$(&#8220;div.box&#8221;).replaceWith(&#8220;&lt;div&gt;&#8230;&lt;/div&gt;&#8221;)</b><br />
CLASS名 box が指定されたdivタグを&lt;div&gt;&#8230;&lt;/div&gt;に入れ替える<br />
<br />
<b>$(&#8220;div.box&#8221;).remove()</b><br />
CLASS名 box が指定されたdivタグを削除（中身もすべて）<br />
<br />
<br />
今回はManipulation系の中でも新しく要素を追加するものを抜粋して紹介しています。本家ドキュメントではカテゴリが細かく分けられていますが、新しく要素を追加するものはほぼ紹介できていると思います。その他のManipulation系メソッドも知りたい方は、ぜひ本家ドキュメントをのぞいて見て下さい。<br />
<br />
<a href="http://api.jquery.com/category/manipulation/">Manipulation – jQuery API</a><br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.detelu.com/blog/2011/11/jquery-manipulation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.detelu.com/blog/2011/11/jquery-manipulation/" />
	</item>
		<item>
		<title>jQuery &#8211; いろんなセレクタ指定方法＋αを覚えて、目的の要素をさくっと取得する</title>
		<link>http://www.detelu.com/blog/2011/11/jquery-selector-traversing/</link>
		<comments>http://www.detelu.com/blog/2011/11/jquery-selector-traversing/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 08:49:56 +0000</pubDate>
		<dc:creator>DETELU</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[テンプレート&スニペット]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[スニペット]]></category>

		<guid isPermaLink="false">http://www.detelu.com/blog/?p=681</guid>
		<description><![CDATA[ずいぶん以前にセレクタについて書いたのですが、今回はセレクタの種類を抜粋して、記述例と説明書きにまとめてました。「セレクタとは？」という方は、まず下記記事を読んでみて下さい。 jQueryを使ってみよう。(基本編 セレク [...]]]></description>
			<content:encoded><![CDATA[<p>
ずいぶん以前にセレクタについて書いたのですが、今回はセレクタの種類を抜粋して、記述例と説明書きにまとめてました。「セレクタとは？」という方は、まず下記記事を読んでみて下さい。<br />
<br />
<a href="http://www.detelu.com/blog/2008/09/jquery%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%88%e3%81%86%e3%80%82%e5%9f%ba%e6%9c%ac%e7%b7%a8-%e3%82%bb%e3%83%ac%e3%82%af%e3%82%bf%ef%bc%91/">jQueryを使ってみよう。(基本編 セレクタ１)</a><br />
<br />
＋αというのはトラバース(走査)系のメソッドです。「この要素を抜き出したい！」と思ったときにセレクタだけでは抜き出しにくい場合があります。そういうときにトラバース(走査)系のメソッドを使うと、簡単にできたりするので覚えておくと便利なものです。<br />
<br />
「こういう書き方をすると、こういう要素が選択される」という例で説明を添えていますが、数が多いので説明書きは、ほんとうに添えた程度です。説明だけではわかりにくいと思うので動作サンプルを用意しました。動作サンプルを眺めながら、ちらっと説明書きをチェックしてもらえれば「なるほど！」となるはず。。。ご利用ください。<br />
<br />
<a href="http://detelu.com/blog/sample/jQuery/selector-traversing/">jQuery セレクタ＆トラバース動作サンプル</a><br />
<br />
<h3>[ セレクタ ]</h3>
<br />
<b>$(&#8220;body&#8221;)</b><br />
bodyタグの要素を選択<br />
<br />
<b>$(&#8220;#id1&#8243;)</b><br />
ID名 id1 の要素を選択<br />
<br />
<b>$(&#8220;.class1&#8243;)</b><br />
CLASS名 class1 の要素を選択<br />
<br />
<b>$(&#8220;.class1 .class2&#8243;)</b><br />
CLASS名 class1 の要素の中にあるCLASS名 class2 の要素を選択<br />
<br />
<b>$(&#8220;.class3, .class4&#8243;)</b><br />
CLASS名 class3、もしくはCLASS名 class4 の要素を選択<br />
<br />
<b>$(&#8220;.class5&#8243;, &#8220;#id1&#8243;)</b><br />
ID名 id1 の要素の中にあるCLASS名 class5 の要素を選択<br />
<br />
<b>$(&#8220;.class6.class7&#8243;)</b><br />
CLASS名 class6 と class7 2つ持つ要素を選択<br />
<br />
<b>$(&#8220;a[href]&#8220;)</b><br />
aタグのhref属性がある要素を選択<br />
<br />
<b>$(&#8220;a[href = '#pagetop']&#8220;)</b><br />
aタグのhref属性の値が「#pagetop」の要素を選択<br />
<br />
<b>$(&#8220;a[href != '#pagetop']&#8220;)</b><br />
aタグのhref属性の値が「#pagetop」でない要素を選択<br />
<br />
<b>$(&#8220;a[href ^= '#link']&#8220;)</b><br />
aタグのhref属性の値が「#link」から始まる要素を選択<br />
<br />
<b>$(&#8220;a[href $= 'bottom']&#8220;)</b><br />
aタグのhref属性の値が「bottom」で終わる要素を選択<br />
<br />
<b>$(&#8220;a[href *= 'page']&#8220;)</b><br />
aタグのhref属性の値に「page」が含まれている要素を選択<br />
<br />
<b>$(&#8220;ul li:first&#8221;)</b><br />
すべてのulタグ内をあわせたliタグの中の最初の要素を選択<br />
<br />
<b>$(&#8220;ul li:first-child&#8221;)</b><br />
各ulタグ内にあるそれぞれのliタグの最初の要素を選択<br />
<br />
<b>$(&#8220;ul li:last&#8221;)</b><br />
すべてのulタグ内をあわせたliタグの中の最後の要素を選択<br />
<br />
<b>$(&#8220;ul li:last-child&#8221;)</b><br />
各ulタグ内にあるそれぞれのliタグの最後の要素を選択<br />
<br />
<b>$(&#8216;li:not(&#8220;.class6&#8243;)&#8217;)</b><br />
liタグでCLASS名 class6 が指定されていない要素を選択<br />
<br />
<br />
<h3>[ トラバース ]</h3>
<br />
要素については先祖、親子、兄弟という階層が存在します。<br />
<pre class="brush: xml;">
&lt;div&gt;
	&lt;ul&gt;
		&lt;li&gt;兄&lt;/li&gt;
		&lt;li&gt;この要素から見て....ul要素は親、div要素は先祖&lt;/li&gt;
		&lt;li&gt;弟&lt;/li&gt;
	&lt;/u/&gt;
	ul要素からみるとli要素は子、div要素は親ということになります。
&lt;/div&gt;
</pre>
<br />
以下説明に子要素や兄要素等の言葉がでてきますが、簡単に説明すると上記のような感じなのでイメージできれば簡単です。<br />
<br />
<br />
<b>$(&#8220;#id1&#8243;).find(&#8220;.class7&#8243;)</b><br />
ID名 id1 の要素の中にあるCLASS名 class7 の要素を選択<br />
<br />
<b>$(&#8220;ul&#8221;).children(&#8220;.class6&#8243;)</b><br />
ulタグ の子要素にある CLASS名 class6 の要素を選択<br />
<br />
<b>$(&#8220;li.class6&#8243;).parent()</b><br />
CLASS名 class6 があるliタグを持つ親要素を選択<br />
<br />
<b>$(&#8220;li.class6&#8243;).parent(&#8220;#id1&#8243;)</b><br />
CLASS名 class6 があるliタグを持つ親要素でID名 id1 の要素を選択<br />
<br />
<b>$(&#8220;li.class6&#8243;).next()</b><br />
CLASS名 class6 があるliタグに隣接する弟要素を選択<br />
<br />
<b>$(&#8220;li.class6&#8243;).next(&#8220;.class7&#8243;)</b><br />
CLASS名 class6 があるliタグに隣接する弟要素の中でCLASS名 class7 の要素であれば選択<br />
(それ以外であれば選択しない)<br />
<br />
<b>$(&#8220;li.class7&#8243;).prev()</b><br />
CLASS名 class7 があるliタグに隣接する兄要素を選択<br />
<br />
<b>$(&#8220;li.class7&#8243;).next(&#8220;.class6&#8243;)</b><br />
CLASS名 class7 があるliタグに隣接する兄要素の中でCLASS名 class6 の要素であれば選択<br />
(それ以外であれば選択しない)<br />
<br />
<b>$(&#8220;a[href ^= '#link']&#8220;).closest(&#8220;li&#8221;)</b><br />
aタグのhref属性の値が「#link」から始まる要素の最も近いliタグ(親要素)を選択<br />
<br />
<b>$(&#8220;li&#8221;).slice(&#8220;3,12&#8243;)</b><br />
すべてのliタグをあわせた0から数えて3個目から12個目までの間の要素を選択<br />
<br />
<b>$(&#8220;li&#8221;).find(&#8220;a&#8221;).css({color: &#8216;white&#8217;}).end()</b><br />
liタグ内にあるaタグにスタイルを追加した後、直前の要素を選択<br />
<br />
<b>$(&#8220;li&#8221;).not(&#8220;li.class6&#8243;)</b><br />
すべてのliタグでCLASS名 class6 が指定されていない要素を選択<br />
<br />
<b>$(&#8220;a[href *= 'middle']&#8220;).first()</b><br />
aタグのhref属性の値に「middle」が含まれている一番最初にある要素を選択<br />
<br />
<b>$(&#8220;a[href *= 'middle']&#8220;).last()</b><br />
aタグのhref属性の値に「middle」が含まれている一番最後にある要素を選択<br />
<br />
<b>$(&#8220;p&#8221;).siblings()</b><br />
pタグの兄弟要素を選択<br />
<br />
<b>$(&#8220;p&#8221;).siblings(&#8220;p&#8221;)</b><br />
pタグの兄弟要素の中でpタグの要素を選択<br />
<br />
<br />
この他にもCSS2、3系のセレクタ、フォーム関連のセレクタ等、まだまだたくさんあります。もっと詳しく動作内容を知りたい場合は、jQuery本家ドキュメント「<a href="http://api.jquery.com/category/selectors/">Selectors – jQuery API</a>」「<a href="http://api.jquery.com/category/traversing/">Traversing – jQuery API</a>」で確認してみてください。<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.detelu.com/blog/2011/11/jquery-selector-traversing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.detelu.com/blog/2011/11/jquery-selector-traversing/" />
	</item>
		<item>
		<title>jQueryプラグインを使わずに自前カルーセルパネルを関数化</title>
		<link>http://www.detelu.com/blog/2011/11/carouselpanel-function/</link>
		<comments>http://www.detelu.com/blog/2011/11/carouselpanel-function/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 16:00:41 +0000</pubDate>
		<dc:creator>DETELU</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[テンプレート&スニペット]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.detelu.com/blog/?p=654</guid>
		<description><![CDATA[「jQueryプラグインを使わずに自前カルーセルパネルを導入してみる」で作成したものを使い回しができるよう関数化してみました。 プラグインを使わずにカルーセルパネル（関数化） プラグインにすると少しカスタマイズの難易度が [...]]]></description>
			<content:encoded><![CDATA[<p>
「<a href="http://www.detelu.com/blog/2011/11/carouselpanel/">jQueryプラグインを使わずに自前カルーセルパネルを導入してみる</a>」で作成したものを使い回しができるよう関数化してみました。<br />
<br />
<a href="http://detelu.com/blog/sample/jQuery/carousel/func.html">プラグインを使わずにカルーセルパネル（関数化）</a><br />
<br />
プラグインにすると少しカスタマイズの難易度が上がる気がする、もっと機能がついたものたくさん配布されているのでこれを使う理由があまりない、「自前で」と銘打ってる、ということで関数にしました。<br />
<br />
あくまでも「ちょっとJavascriptを触って勉強がてらカスタマイズに挑戦して導入もできるように」ということが目的です。ですので、前記事「<a href="http://www.detelu.com/blog/2011/11/carouselpanel/">jQueryプラグインを使わずに自前カルーセルパネルを導入してみる</a>」のjavascriptと比べつつ眺めてもらえればと思います。<br />
<br />
<br />
さて、関数化するにあたり使い回しができるようにすために「横型、縦型、両方利用できる」「複数設置可能にする」ということを考慮し、単純に引数で判定することにしました。<br />
<br />
「引数」というのは、簡単にいうと「関数に渡す値」のことで、『関数名(引数1,引数2,&#8230;)』という形で利用します。<br />
<br />
<pre class="brush: xml;">
carouselPanel(&quot;#carouselwrap&quot;, &quot;left&quot;, 1);
</pre>
<br />
今回作成したものは上記のように、この引数に指定された値を元にJavascriptの処理を振り分けています。で、できあがったものは下記。<br />
<br />
<pre class="brush: jscript;">
/* Copyright (c) 2011 detelu (http://www.detelu.com)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 * carouselPanel.js
 * Version: 2011-11-18
*/
//id=ターゲットになる要素のid名、posmove=横に動かしたい場合はleft,縦はtop、limove=スライドさせるliの数を引数として設定
function carouselPanel(id,posmove,limove) {
	var carousel_size,ul_size,ul_w_size,ul_h_size,li_move_top,li_move_left;
	//ターゲットになる要素を変数 tgt に代入
	var tgt = $(id);
	//tgtの要素の中に戻る、進むボタンを追加
	tgt.append('&lt;div class=&quot;prev hide&quot;&gt;&lt;/div&gt;&lt;div class=&quot;next show&quot;&gt;&lt;/div&gt;');
	//tgtの要素の中からulタグ要素を抜き出し変数 tgt_ul に代入
	var tgt_ul = tgt.find(&quot;ul&quot;);
	//tgtの要素の中からliタグ要素を抜き出し変数 tgt_li に代入
	var tgt_li = tgt.find(&quot;li&quot;);
	var li_move = limove;
	var li_w_size = tgt_li.outerWidth();
	var li_h_size = tgt_li.outerHeight();
	var li_num = tgt_li.size();
	//引数 posmove に left が指定されていたら 横に動かすのに必要な値を変数に代入していく
	if(posmove == &quot;left&quot;) {
		carousel_size = tgt.width();
		ul_w_size = li_w_size*li_num;
		ul_h_size = li_h_size;
		ul_size = ul_w_size;
		li_move_top = 0;
		li_move_left = li_w_size*li_move;
	//引数 posmove に top が指定されていたら 縦に動かすのに必要な値を変数に代入していく
	}else if(posmove == &quot;top&quot;) {
		carousel_size = tgt.height();
		ul_w_size = li_w_size;
		ul_h_size = li_h_size*li_num;
		ul_size = ul_h_size;
		li_move_top = li_h_size*li_move;
		li_move_left = 0;
	}
	tgt_ul.css({position: 'absolute',top: '0',left: '0', width: ul_w_size+'px', height: ul_h_size+'px'});
	var tgt_prev = tgt.find(&quot;div.prev&quot;);
	var tgt_next = tgt.find(&quot;div.next&quot;);
	tgt_prev.click(function(){
		//クリックされた要素（ここではclass名 prevの要素）にclass名 hideが指定されていなければ以下を実行
		if(!$(this).hasClass('hide')){
				tgt.find('ul:not(:animated)').animate(
				{top:'+='+li_move_top, left:'+='+li_move_left},
				600,
				function(){
					var ul_pos = boxPosition(tgt_ul, posmove);
					//tgt_next に代入されている要素のclass hide を取り除き、class show を追加
					tgt_next.removeClass(&quot;hide&quot;).addClass(&quot;show&quot;);
					if(ul_pos === 0) {
						tgt_prev.removeClass(&quot;show&quot;).addClass(&quot;hide&quot;);
					}
				}
			);
		}
	});
	//クリックされた要素（ここではclass名 nextの要素）にclass名 hideが指定されていなければ以下を実行 以下略
	tgt_next.click(function(){
		if(!$(this).hasClass('hide')) {
			tgt.find('ul:not(:animated)').animate(
				{top:'-='+li_move_top, left:'-='+li_move_left},
				600,
				function(){
					var ul_pos = boxPosition(tgt_ul,posmove);
					tgt_prev.removeClass(&quot;hide&quot;).addClass(&quot;show&quot;);
					if(carousel_size &gt;= (ul_size + ul_pos)) {
						tgt_next.removeClass(&quot;show&quot;).addClass(&quot;hide&quot;);
					}
				}
			);
		}
	});
	function boxPosition(ele,pos) {
		var position = ele.position();
		return position[pos];
	}
}
</pre>
<br />
と、このように書き直してみました。少しだけ補足。<br />
<br />
<pre class="brush: jscript;">
var tgt = $(id);
</pre>
<br />
ここでjQueryを利用して引数 id に指定された要素を取得し、変数に代入しています。変数に代入しているのは、$(id)で抜き出した要素を何度か利用するためです。<br />
<br />
たとえばjQueryは$(&#8220;#abc&#8221;)という記述があるたびに、HTMLの中で「id=abc」が指定された要素を探して抜き出す、という処理を行います。もし$(&#8220;#abc&#8221;)という記述が10個あれば、その度に「id=abc」が指定された要素を探して抜き出すという処理をさせることになるのです。<br />
<br />
この「探して抜き出す」という処理を何度も行わせないために、一度抜き出したものを変数に代入しておいて、以降は変数に代入されている要素を利用するようにしています。処理速度を上げるための一個のポイントなので、覚えておくと損はないです。<br />
<br />
ちょっとした記述の違いで処理速度が大幅にかわることもあります。記事は古いですが下記「てっく煮ブログ」さんがとても参考にります。あと英語ですがもっと詳しく知りたい方は「<a href="http://addyosmani.com/jqprovenperformance/">jQuery Proven Performance Tips And Tricks (Slides)</a>」は必見の内容です。英語はちょっと&#8230;、という方はgoogle先生に聞いてみて下さい。<br />
<br />
<a href="http://d.hatena.ne.jp/nitoyon/20081211/jquery_fast_css">jQuery を高速に使う CSS セレクタの書き方 &#8211; てっく煮ブログ</a><br />
<a href="http://addyosmani.com/jqprovenperformance/">jQuery Proven Performance Tips And Tricks (Slides)</a><br />
<a href="http://www.google.co.jp/search?q=jquery+%E9%AB%98%E9%80%9F&amp;ie=utf-8&amp;oe=utf-8&amp;aq=t&amp;rls=org.mozilla:ja-JP-mac:official&amp;hl=ja&amp;client=firefox-a">jquery 高速 &#8211; Google 検索</a><br />
<br />
<pre class="brush: jscript;">
var tgt_ul = tgt.find(&quot;ul&quot;);
</pre>
<br />
ここでも同じように要素を代入しているのですが、jQueryのfindメソッドを利用して要素を抜き出しています。ここでは変数 tgt に代入されている要素の中の ul を抜き出し、変数 tgt_ul に代入しています。<br />
<br />
<a href="http://api.jquery.com/find/">.find() – jQuery API</a><br />
<a href="http://stacktrace.jp/jquery/api/traversing/find.html">find([expr]) &#8211; jQuery API 1.4.4 日本語リファレンス &#8211; StackTrace</a><br />
<br />
※本家ドキュメントは日本語がないので、バージョン違いですが日本語リファレンスを掲載しているサイト「<a href="http://stacktrace.jp/jquery/api/">StackTrace</a>」さんのリンクを張らせて頂いてますが、バージョンが違うと挙動が異なることもあり、jQuery本家のドキュメントと比べながら利用しましょう。<br />
<br />
ドキュメントについては、下記もおすすめです。こちらも古いのですが、逆引きになっているので、jQueryでどんなことができるのかをざっくり確認しながら利用できます。<br />
<br />
<a href="http://www.atmarkit.co.jp/fdotnet/jqueryref/index/index.html">jQuery逆引きリファレンス － ＠IT</a><br />
<br />
<br />
最後にこの関数を利用方法を。jQueryと関数を記述したファイルを読み込んで、下記のように指定します。<br />
<br />
<pre class="brush: xml;">
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;carouselPanel.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;
$(function(){
	//carouselPanel(&quot;カルーセルパネルのid名&quot;, &quot;left(左右に動かす) or top(上下に動かす)&quot;, 戻る、進むでスライドさせるliの数);
	carouselPanel(&quot;#carouselwrap&quot;, &quot;left&quot;, 1);
});
&lt;/script&gt;
</pre>
<br />
HTML、CSSについては「<a href="http://www.detelu.com/blog/2011/11/carouselpanel/">jQueryプラグインを使わずに自前カルーセルパネルを導入してみる</a>」で作成したものとあまり変わりませんが、HTMLのid属性はページ内で同じものを複数記述するのは規則違反になるので、複数設置可能できるよう prev, next, carouselの id指定をclass指定に変更しています。ファイル一式ダウンロードできるようにしたので、そちらのぞいてください。<br />
<br />
<a href="http://detelu.com/blog/sample/jQuery/carousel/carouselPanel.zip">カルーセルパネル関数 &#8211; ファイル一式ダウンロード</a><br />
<br />
もしそのまま利用したい方はご自由にお使いください。もちろん改変もご自由にどーぞ。<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.detelu.com/blog/2011/11/carouselpanel-function/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.detelu.com/blog/2011/11/carouselpanel-function/" />
	</item>
		<item>
		<title>jQueryプラグインを使わずに自前カルーセルパネルを導入してみる</title>
		<link>http://www.detelu.com/blog/2011/11/carouselpanel/</link>
		<comments>http://www.detelu.com/blog/2011/11/carouselpanel/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 04:04:49 +0000</pubDate>
		<dc:creator>DETELU</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[テンプレート&スニペット]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[スニペット]]></category>

		<guid isPermaLink="false">http://www.detelu.com/blog/?p=626</guid>
		<description><![CDATA[カルーセルパネル系のjQueryプラグインはかなり数が多いのですが、今回はjQuery本体のみ利用しプラグインを利用せず自作してみます。CSSとJavascriptを数行書き換えるだけで横型、縦型の２つが作れます。 プラ [...]]]></description>
			<content:encoded><![CDATA[<p>
カルーセルパネル系のjQueryプラグインはかなり数が多いのですが、今回はjQuery本体のみ利用しプラグインを利用せず自作してみます。CSSとJavascriptを数行書き換えるだけで横型、縦型の２つが作れます。<br />
<br />
<a href="http://detelu.com/blog/sample/jQuery/carousel/index.html">プラグインを使わずにカルーセルパネル 横型</a><br />
<a href="http://detelu.com/blog/sample/jQuery/carousel/index2.html">プラグインを使わずにカルーセルパネル 縦型</a><br />
<br />
ではでは横型のカルーセルパネルを作っていきます。まずはHTML、CSSでカルーセルパネルの表示部分をつくります。内容を表示させるボックスを指定して、その中にリスト横並びに並べることにしましょう。両端にはリストを動かすボタン（「id=prev」「id=next」）を置き、これはCSSで配置を制御します。で、できたものは下記↓。<br />
<br />
<a href="http://detelu.com/blog/sample/jQuery/carousel/css.html">プラグインを使わずにカルーセルパネル HTML、CSSのみ</a><br />
<br />
<strong>■HTML</strong><br />
<pre class="brush: xml;">
&lt;div id=&quot;carouselwrap&quot;&gt;
&lt;div id=&quot;prev&quot; class=&quot;hide&quot;&gt;&lt;/div&gt;&lt;div id=&quot;next&quot; class=&quot;show&quot;&gt;&lt;/div&gt;
&lt;div id=&quot;carousel&quot;&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;img/1.gif&quot;&gt;&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;img/2.gif&quot;&gt;&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;img/3.gif&quot;&gt;&lt;/a&gt;&lt;/li&gt;
	.......
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
</pre>
<br />
<strong>■CSS</strong><br />
<pre class="brush: css;">
&lt;style&gt;
* {
	margin: 0;
	padding: 0;
}
#carouselwrap {
	position:relative;
	margin:40px auto;
	width:900px;
	height:155px;
	background: #efefef;
}
#carouselwrap #carousel {
	position:relative;
	width:100%;
	height:100%;
	overflow: hidden; //はみでた部分を隠す
}
#carouselwrap ul{
	list-style-type:none;
}
#carouselwrap ul li {
	float:left; // liを横並びにする
	width: 270px;
	height:100%;
	padding-left: 23px;
	display:inline;
}
#carouselwrap ul li img {
	border:none;
}
#carouselwrap #prev,
#carouselwrap #next {
	position: absolute;
	top: 0;
	width: 20px;
	height:100%;
}
#carouselwrap #prev {
	left: -20px; //戻るボタンを左端に配置
	background-image: url(./img/prev.png);
	background-repeat: no-repeat;
	background-position: 50% 50%;
}
#carouselwrap #next {
	right: -20px; //進むボタンを右端に配置
	background-image: url(./img/next.png);
	background-repeat: no-repeat;
	background-position: 50% 50%;
}
// ボタンがアクティブなときは「show」、使えないときは「hide」
#carouselwrap .show {
	cursor: pointer;
	background: #FF3399;
}
#carouselwrap .hide {
	background: #ccc;
}
&lt;/style&gt;
</pre>
<br />
戻る、進むボタンを「carouselwrap(幅900px)」の左右-20pxに配置したので幅940pxのパネルができたことになります。これでHTML、CSSの準備はOKです。<br />
<br />
<br />
では次にJavascriptでパネルを動くようにしましょう。動作の基本は「戻る、進むボタンでulタグの位置（position leftの値）を変更する」ということです。<br />
<br />
Javascript側でやることを簡単にまとめると<br />
・liタグが全部横に並んだときの幅を取得し、ulタグにスタイルを書き込む<br />
・戻る、進むボタンがクリックされたらulのposition leftの値を変更する<br />
の2点です。<br />
<br />
あとは動作条件として「ulの右端、左端が表示されたときは各戻る、進むボタンを動作させない」「戻る、進むボタンはスライド中は動作させない」といったものを含めて下記のようなものができあがりました。あとJavascriptが切られている場合はボタンを表示させたくないので、HTML側でボタンの記述は削除し、Javascript側で追加するようにしています。<br />
<br />
<strong>■Javascript</strong><br />
<pre class="brush: jscript;">
&lt;script&gt;
$(function(){
	// prev,nextをクリックしたときに動かすliの数
	var li_move = 3;
	// prev,nextを追加
	$(&quot;#carouselwrap&quot;).append('&lt;div id=&quot;prev&quot; class=&quot;hide&quot;&gt;&lt;/div&gt;&lt;div id=&quot;next&quot; class=&quot;show&quot;&gt;&lt;/div&gt;');
	// カルーセルパネルの幅を取得
	var carousel_wid = $(&quot;#carouselwrap&quot;).width();
	// liのpaddingを含む幅を取得
	var li_wid = $(&quot;#carousel li&quot;).outerWidth();
	// liの数を取得
	var li_num = $(&quot;#carousel li&quot;).size();
	// ulの幅を計算(liを全部横に並べた幅)
	var ul_wid = li_wid*li_num;
	// ulにスタイルを追加
	$('#carousel ul').css({
		position: 'absolute',
		top: '0',
		left: '0',
		width: ul_wid+'px'
	});
	$('#prev').click(function(){
		// prevをクリックしたときにclass=hideが指定されていなければ、以下を実行
		if($(this).attr(&quot;class&quot;) != &quot;hide&quot;) {
			// ulのpositionを左に動かすアニメーション(:not(:animated)は動いている最中のクリック防止用)
			$('#carousel ul:not(:animated)').animate(
				{left:'+='+li_wid*li_move},
				600,
				function(){
					// アニメーションが完了したらulのposition-leftの位置を取得
					var ul_pos = boxPosition(&quot;#carousel ul&quot;,&quot;left&quot;);
					// nextのclassを「show」に書き換え
					$('#next').attr(&quot;class&quot;,&quot;show&quot;);
					// ulのposition-leftが0の場合、prevのclassを「hide」に書き換え
					if(ul_pos === 0) {
						$('#prev').attr(&quot;class&quot;,&quot;hide&quot;);
					}
				}
			);
		}
	});
	$('#next').click(function(){
		// nextをクリックしたときにclass=hideが指定されていなければ、以下を実行（以下略）
		if($(this).attr(&quot;class&quot;) != &quot;hide&quot;) {
			$('#carousel ul:not(:animated)').animate(
				{left:'-='+li_wid*li_move},
				600,
				function(){
					var ul_pos = boxPosition(&quot;#carousel ul&quot;,&quot;left&quot;);
					$('#prev').attr(&quot;class&quot;,&quot;show&quot;);
					if(carousel_wid &gt; (ul_wid+ul_pos)) {
						$('#next').attr(&quot;class&quot;,&quot;hide&quot;);
					}
				}
			);
		}
	});
	function boxPosition(ele,pos) {
	 	// 指定されたエレメントのpositionの各値を取得
		var position = $(ele).position();
		// 指定された位置の値をリターン
		return position[pos];
	}
});
&lt;/script&gt;
</pre>
<br />
少し説明を加えると「var li_move = 3」という指定でliタグ何個分の幅をスライドさせるか、という指定をしています。CSSで表示サイズやリストの幅を変更したときに、「var li_move = 1」で1個ずつスライドさせる、「var li_move = 5」で5個スライドさせる、といったことが簡単にできるようになっています。<br />
<br />
あとはCSSで表示サイズやデザインを自分のサイトにあうように調整すれば、導入完了です。<br />
<br />
<br />
縦型のカルーセルパネルについても少し説明すると、横型のカルーセルパネルは各幅を取得していましたが、縦型の場合は高さを取得します。で、その数値を元にulタグのtopの値を変更します。<br />
<br />
<a href="http://detelu.com/blog/sample/jQuery/carousel/index2.html">プラグインを使わずにカルーセルパネル 縦型</a><br />
<br />
CSSを縦用のものにし、Javacriptを下記のように書き換えるだけです。<br />
<br />
■縦型 CSS<br />
変更した要素のみ抜粋しています。<br />
<pre class="brush: css;">
#carouselwrap {
	position:relative;
	margin:40px auto;
	width:270px;
	height:340px;
	background: #efefef;
}
#carouselwrap ul li {
	width:100%;
	height: 155px;
	padding-top: 10px;
}
#carouselwrap #prev,
#carouselwrap #next {
	position: absolute;
	left: 0;
	width: 100%;
	height:20px;
}
#carouselwrap #prev {
	top: -20px;
	background-image: url(./img/top.png);
	background-repeat: no-repeat;
	background-position: 50% 50%;
}
#carouselwrap #next {
	bottom: -20px;
	background-image: url(./img/bottom.png);
	background-repeat: no-repeat;
	background-position: 50% 50%;
}
</pre>
<br />
■縦型 Javascript<br />
横型のjavascriptから変更した箇所は「//*****書き換え******//」と書かれた数行です。<br />
<pre class="brush: jscript;">
&lt;script&gt;
$(function(){
	// prev,nextをクリックしたときに動かすliの数
	var li_move = 2;
	// prev,nextを追加
	$(&quot;#carouselwrap&quot;).append('&lt;div id=&quot;prev&quot; class=&quot;hide&quot;&gt;&lt;/div&gt;&lt;div id=&quot;next&quot; class=&quot;show&quot;&gt;&lt;/div&gt;');
	// カルーセルパネルの高さを取得
	var carousel_wid = $(&quot;#carouselwrap&quot;).height(); //*****書き換え******//
	// liのpaddingを含む高さを取得
	var li_wid = $(&quot;#carousel li&quot;).outerHeight(); //*****書き換え******//
	// liの数を取得
	var li_num = $(&quot;#carousel li&quot;).size();
	// ulの高さを計算(liを全部縦に並べた高さ)
	var ul_wid = li_wid*li_num;
	// ulにスタイルを追加
	$('#carousel ul').css({
		position: 'absolute',
		top: '0',
		left: '0',
		height: ul_wid+'px' //*****書き換え******//
	});
	$('#prev').click(function(){
		// prevをクリックしたときにclass=hideが指定されていなければ、以下を実行
		if($(this).attr(&quot;class&quot;) != &quot;hide&quot;) {
			// ulのpositionを左に動かすアニメーション(:not(:animated)は動いている最中のクリック防止用)
			$('#carousel ul:not(:animated)').animate(
				{top:'+='+li_wid*li_move},
				600,
				function(){
					// アニメーションが完了したらulのposition-topの位置を取得
					var ul_pos = boxPosition(&quot;#carousel ul&quot;,&quot;top&quot;); //*****書き換え******//
					// nextのclassを「show」に書き換え
					$('#next').attr(&quot;class&quot;,&quot;show&quot;);
					// ulのposition-topが0の場合、prevのclassを「hide」に書き換え
					if(ul_pos === 0) {
						$('#prev').attr(&quot;class&quot;,&quot;hide&quot;);
					}
				}
			);
		}
	});
	$('#next').click(function(){
		// nextをクリックしたときにclass=hideが指定されていなければ、以下を実行（以下略）
		if($(this).attr(&quot;class&quot;) != &quot;hide&quot;) {
			$('#carousel ul:not(:animated)').animate(
				{top:'-='+li_wid*li_move},
				600,
				function(){
					var ul_pos = boxPosition(&quot;#carousel ul&quot;,&quot;top&quot;); //*****書き換え******//
					$('#prev').attr(&quot;class&quot;,&quot;show&quot;);
					if(carousel_wid &gt; (ul_wid+ul_pos)) {
						$('#next').attr(&quot;class&quot;,&quot;hide&quot;);
					}
				}
			);
		}
	});
	function boxPosition(ele,pos) {
	 	// 指定されたエレメントのpositionの各値を取得
		var position = $(ele).position();
		// 指定された位置の値をリターン
		return position[pos];
	}
});
&lt;/script&gt;
</pre>
<br />
これでトップページのメインビジュアルのスライドとして使う、サイドバーに縦長に置きたい場合も、CSSでサイズ調整すれば、どこでもカルーセルパネルを導入できます。利用する際にはjQuery本体を読み込むのをお忘れなく。<br />
<br />
<pre class="brush: xml;">
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js&quot;&gt;&lt;/script&gt;
</pre>
<br />
<br />
長くなりましたが、少しJavascriptができれば、横型、縦型のJavascriptを1つにまとめて関数化して使い回しやすくするのも簡単です。Javascript練習中の方は、ぜひ関数化して利用することにもチャレンジして見て下さい。<br />
<br />
<a href="http://api.jquery.com/">jQuery API</a><br />
<a href="http://stacktrace.jp/jquery/api/">jQuery API 1.4.4 日本語リファレンス &#8211; StackTrace</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.detelu.com/blog/2011/11/carouselpanel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.detelu.com/blog/2011/11/carouselpanel/" />
	</item>
		<item>
		<title>jQueryで簡単タブメニューを自作する</title>
		<link>http://www.detelu.com/blog/2011/07/jquery-tabmenu/</link>
		<comments>http://www.detelu.com/blog/2011/07/jquery-tabmenu/#comments</comments>
		<pubDate>Sat, 16 Jul 2011 03:31:46 +0000</pubDate>
		<dc:creator>DETELU</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[テンプレート&スニペット]]></category>
		<category><![CDATA[スニペット]]></category>

		<guid isPermaLink="false">http://www.detelu.com/blog/?p=558</guid>
		<description><![CDATA[WordPress 3.2.1がリリースされてますね。3.2からIE6非対応とのことなのでまだインストールすらしてませんが、そのうち試そう。 今日はスマホで活躍の場がありそうなタブメニューをjQueryで作成してみます。 [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://ja.wordpress.org/2011/07/13/wordpress-3-2-1/">WordPress 3.2.1</a>がリリースされてますね。3.2からIE6非対応とのことなのでまだインストールすらしてませんが、そのうち試そう。<br />
<br />
<br />
今日はスマホで活躍の場がありそうなタブメニューをjQueryで作成してみます。<br />
<br />
スマホ対応ページを作成する場合、PCページをそのまま移植しようとするとやたらにページが長くなってしまう場合があります。そんなときはタブメニューを使って、ちょちょいとコンテンツをまとめてみましょう。<br />
<br />
<a href="http://www.detelu.com/blog/sample/jQuery/tabmenu/">jQueryで簡単タブメニュー サンプル</a><br />
<br />
<br />
まずは簡単にHTMLから説明。HTML側にはjQueryで処理しやすいように、タブとコンテンツにidを割り当てます。idは処理しやすくするため「tab_1」「content_1」と文字と数字のセパレータに「_」を入れ、数字が同じものが対になるように割り当てています。<br />
<br />
<pre class="brush: xml;">
&lt;div class=&quot;tabarea&quot;&gt;  
&lt;ul class=&quot;tabs&quot;&gt;  
&lt;li id=&quot;tab_1&quot; class=&quot;selected&quot;&gt;メニュー１&lt;/li&gt;  
&lt;li id=&quot;tab_2&quot;&gt;メニュー２&lt;/li&gt;  
&lt;li id=&quot;tab_3&quot;&gt;メニュー３&lt;/li&gt;  
&lt;/ul&gt;  
&lt;div id=&quot;content_1&quot; class=&quot;content&quot;&gt;『メニュー１』のコンテンツです。&lt;/div&gt;  
&lt;div id=&quot;content_2&quot; class=&quot;content&quot;&gt;『メニュー２』のコンテンツです。&lt;/div&gt;  
&lt;div id=&quot;content_3&quot; class=&quot;content&quot;&gt;『メニュー３』のコンテンツです。&lt;/div&gt;  
&lt;/div&gt;
</pre>
<br />
つぎにCSS。リストを簡単に横並びにできるように「display: box;」を使っています。box非対応ブラウザの表示くずれを避けたい場合は「float: left;」等を使って調整を。<br />
<br />
<pre class="brush: css;">
.tabarea {
	background: #000;
}
ul.tabs {  
	display: box;
	display: -webkit-box;
	display: -moz-box;
	margin:0px;
	padding:0px;
	background: #000;
}
ul.tabs li {  
	list-style:none;
	padding: 20px;
	border: 1px solid #000;  
	border-bottom: 0;
	color: #fff;
}
div.content {
	padding: 20px;
	border: 1px solid #000;  
	border-top: 0;
	background: #fff;
}
.tabarea .selected {
	background: #fff;
	color: #000;
}
#content_2, #content_3 {
	display: none;
} 
</pre>
<br />
最後にjQuery。HTML側で割り当てたタブのidの数字部分取得して、数字の一致するコンテンツのみ表示させる、という処理をしています。<br />
<br />
<pre class="brush: jscript;">
$(function(){
	$(&quot;.tabarea .tabs li&quot;).click(function(){
		var tab = $(this).attr(&quot;id&quot;); //クリックされたタブのidを取得
		var num = tab.split(&quot;_&quot;); //セパレータで分割
		var con = &quot;#content_&quot; + num[1]; //表示させるコンテンツのid名を生成
		$(this).addClass(&quot;selected&quot;); //クリックされたタブのclassにselectedを割り当て
		$(&quot;.tabarea li:not(#&quot;+tab+&quot;)&quot;).removeClass(&quot;selected&quot;); //その他のタブのclassにあるselectedを削除
		$(&quot;.tabarea div[id^=content]&quot;).hide(); //コンテンツをすべて非表示に
		$(&quot;.tabarea &quot; + con).show(); //クリックされたタブ対応のコンテンツのみ表示
	});
});
</pre>
<br />
<br />
今回のサンプルではHTML側で視覚的にどれが対になっているかわかりやすいようidを割り当てましたが、jQuery側で「<a href="http://api.jquery.com/index/">.index()</a>」使って要素の順番を取得し、HTML側はいちいちidを記述しなくても動作するようにもできます。<br />
<br />
<br />
と、こんな感じに、わざわざjQueryプラグインを導入しなくても、ちょこっとjQueryの記述さえわかれば、簡単にタブメニューを導入できます。<br />
<br />
jQueryさわったことがないという方も、この機会にぜひお試しあれ。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.detelu.com/blog/2011/07/jquery-tabmenu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.detelu.com/blog/2011/07/jquery-tabmenu/" />
	</item>
		<item>
		<title>ページ遷移、読み込み時にふわっと表示するjQueryプラグインを再び修正 [ 2012-02-06 ]</title>
		<link>http://www.detelu.com/blog/2011/07/fademover/</link>
		<comments>http://www.detelu.com/blog/2011/07/fademover/#comments</comments>
		<pubDate>Sun, 10 Jul 2011 23:30:38 +0000</pubDate>
		<dc:creator>DETELU</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[プラグイン]]></category>

		<guid isPermaLink="false">http://www.detelu.com/blog/?p=541</guid>
		<description><![CDATA[fadeMoverプラグインの解説ページを別途作成しましたので、下記ページをご覧ください。 jquery.fadeMover &#8211; Fadein and Fadeout for jQuery &#8212;&# [...]]]></description>
			<content:encoded><![CDATA[<p>
fadeMoverプラグインの解説ページを別途作成しましたので、下記ページをご覧ください。<br />
<br />
<a href="http://www.detelu.com/fademover/">jquery.fadeMover &#8211; Fadein and Fadeout for jQuery</a><br />
<br />
<br />
 &#8212;&#8212;- 以下 [ 2012-02-06 ]  以前の内容です &#8212;-<br />
<br />
[ 2012-02-06 追記 ] 最近このページのアクセスがかなり増えているので、記事を見直していたら、制作途中のものを記事にしてしまっていました。もしご利用をお考えになられていても「動かない&#8230;wtf&#8230;」となっていた方がおられたと思います。。。申し訳ありません。<br />
<br />
作成途中で「ページ内リンクの動作禁止にしないと使えないよね、これ。。。」と気がつき、機能を付け足していたんですが、公開していたものが動作確認中の途中のスクリプトでした。それが原因でアンカーにclassを指定していたらまったく動作しないようになっていました。もし古いものをご利用されている方がいらっしゃいましたら修正していただければと思います。<br />
<br />
<pre class="brush: xml;">
//jquery.fademover.jsの23行目
if(!$(this).attr(&quot;class&quot;)){
</pre>
<br />
<pre class="brush: xml;">
//jquery.fademover.jsの23行目
if(!$(this).hasClass(setting.nofadeOut) &amp;&amp; moveUrl.charAt(0) != &quot;#&quot;){
</pre>
<br />
 &#8212;&#8212;- 以下 [ 2012-02-06 ]  内容修正済みです &#8212;-<br />
<br />
以前作成していたページ遷移、読み込み時にふわっと表示するjQueryプラグインを修正しました。<br />
<br />
ブラウザのバックボタンで戻った時にフェードアウトしたページが表示されない状態で保持されてしまっていたのですが、下記1行追加してきちんと表示されるようになりました。<br />
<br />
<pre class="brush: xml;">
window.onunload = function () {}
</pre>
<br />
プラグインの動作は、<br />
・ページ読み込み時にフェードインする。<br />
・アンカーをクリックし次のページに移る前に現在のページをフェードアウトするというものです。<br />
<br />
<a href="/blog/sample/jQuery/fademover/" class="openwin">jquery.fademover.js サンプル</a><br />
<br />
<pre class="brush: jscript;">
$(function(){
	$('フェード処理する要素').fadeMover({'outSpeed':現在のページをフェードアウトするスピード,'inSpeed':ページ読み込み時のフェードインスピード,'effectType':どのエフェクトを利用するか指定,'nofadeOut','クリックしてもフェードアウトさせないアンカーに記述するclass名'});
	$('body').fadeMover();
});
</pre>
<br />
なにも指定しない場合はフェードイン、フェードアウト両方利用し、処理速度は1000ミリ秒(1秒)になっています。<br />
<br />
effectTypeの指定は、指定なし(もしくは「1」)は両方、フェードインのみは「2」、フェードアウトのみは「3」となります。<br />
<br />
effectTypeは分ける必要もないかなと思いつつ、もしかしたら使うかもってことで分けてあります。<br />
<br />
nofadeOutはクリックしてもフェードアウト処理をさせないアンカータグに対して記述するclass名になります。初期値は「nonmover」になっています。これはページ内リンクに対応するために追加したものです。アンカーにclassを記述してください。もしアンカーのclass名に「nonmover」という文字を含む名前を使っている場合(nonmover1等)は、nofadeOutを別のものに指定してください。<br />
<br />
[ 2012-02-06 追記 ] 「&lt;a href=&#8221;#pagetop&#8221;&gt;」等、#から始まるページ内リンクの記述の場合はclassを付ける必要がないように修正しました。<br />
<br />
<pre class="brush: xml;">
//下記のリンクは動作しません。
&lt;a href=&quot;#pagetop&quot;&gt;ページの先頭へ戻る&lt;/a&gt;
&lt;a href=&quot;/img/big.jpg&quot; class=&quot;nonmover&quot;&gt;画像を開く&lt;/a&gt;
</pre>
<br />
<br />
[ 2012-02-06 追記 ] javascriptの読み込みの関係で、フェードインする前に全部表示されてから動作する場合があります。この場合フェード処理する要素のスタイル自体に「opacity:0」の記述をしておけば一番いいのですが、Javascriptを切っている場合、表示されなくなります。このあたりは少し悩ましいところですが、javascriptでhead要素にスタイルを追加する方法があります。<br />
<strong>※ この記述はフェードアウトのみ利用の場合は必要ありません。</strong><br />
<pre class="brush: jscript;">
/*
jQueryのappendでhead内に対象要素のスタイルに「opacity:0」を追記
IE6〜8対応用に-ms-filter:&quot;alpha( opacity=0 )&quot;;filter: alpha( opacity=0 );
$(function(){〜});の外に記述
*/
$('head').append('&lt;style&gt;#content { opacity: 0;-ms-filter:&quot;alpha( opacity=0 )&quot;;filter: alpha( opacity=0 ); }&lt;/style&gt;');
$(function(){
	$('#content').fadeMover();
});
</pre>
<br />
必ず「<strong>$(function(){〜});の外に記述</strong>」するようにして下さい。これで全部表示されることがなく、スームーズにフェードインするようになるはず。お試しください。<br />
<br />
<br />
jquery.fademover.jsの中身は下記。<br />
<br />
<pre class="brush: jscript;">
/* Copyright (c) 2011 detelu (http://www.detelu.com)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 * jquery.fademover.js
 * Version: 2012-02-06
*/
(function($){
	$.fn.fadeMover = function(options) {
        var defaults = {
            'outSpeed': 1000,
            'inSpeed': 1000,
			'effectType': 1, // fadeIn only 2, fadeOut only 3
			'nofadeOut' : 'nonmover' //fadeOut no thx (class name)
        };
        var setting = $.extend(defaults, options);
        this.each(function() {
			var pel = this;
			if(setting.effectType == 1 || setting.effectType == 2) {
				$(pel).css(&quot;opacity&quot;, 0).animate({opacity: 1}, setting.inSpeed);
			}
			if(setting.effectType == 1 || setting.effectType == 3) {
				$('a').click(function(event) {
					var moveUrl = $(this).attr(&quot;href&quot;);
					if(!$(this).hasClass(setting.nofadeOut) &amp;&amp; moveUrl.charAt(0) != &quot;#&quot;){
						event.preventDefault();
						$(pel).animate({&quot;opacity&quot;: 0}, setting.outSpeed, function(){
							location.href = moveUrl;
						});
					}
				});
			}
		});
		return this;
	}
	window.onunload = function () {};
})(jQuery);
</pre>
<br />
<br />
プラグインを作ってみようと、ぱぱっと作ったものなので不具合はあるかもしれません。とりあへずZIPファイルを置いておきますので、ご利用の方はどーぞ。<br />
<br />
<a href="/blog/sample/jQuery/fademover.zip">fademover.zip (サンプルファイル等一式 107KB)</a><br />
<br />
<div class="tmkm-amazon-view">
	<p><a href="http://www.amazon.co.jp/iwoodArt%E7%A4%BE-%E7%AB%B9%E5%88%B6%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%88%EF%BC%88%E9%9D%92%E7%AB%B9%EF%BC%89-premium-bamboo-keyboard/dp/B00488F9HO%3FSubscriptionId%3D1P5ATKA5ZG15V72CSG82%26tag%3D1n-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB00488F9HO"><img src="http://ecx.images-amazon.com/images/I/510AJoOPigL._SL160_.jpg" border="0" alt="iwoodArt社 竹制キーボート（青竹）/premium bamboo keyboard for PC (Green Bamboo)" /></a></p>
	<p><a href="http://www.amazon.co.jp/iwoodArt%E7%A4%BE-%E7%AB%B9%E5%88%B6%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%88%EF%BC%88%E9%9D%92%E7%AB%B9%EF%BC%89-premium-bamboo-keyboard/dp/B00488F9HO%3FSubscriptionId%3D1P5ATKA5ZG15V72CSG82%26tag%3D1n-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB00488F9HO">iwoodArt社 竹制キーボート（青竹）/premium bamboo keyboard for PC (Green Bamboo)</a>	<p><em>Amazon価格：</em>￥ 6,800</p>
	<p>カテゴリ：</p>
<hr class="tmkm-amazon-clear" /></div>
]]></content:encoded>
			<wfw:commentRss>http://www.detelu.com/blog/2011/07/fademover/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.detelu.com/blog/2011/07/fademover/" />
	</item>
		<item>
		<title>ページ遷移、読み込み時にふわっと表示するjQueryプラグインをつくってみました。</title>
		<link>http://www.detelu.com/blog/2011/02/%e3%83%9a%e3%83%bc%e3%82%b8%e9%81%b7%e7%a7%bb%e3%80%81%e8%aa%ad%e3%81%bf%e8%be%bc%e3%81%bf%e6%99%82%e3%81%ab%e3%81%b5%e3%82%8f%e3%81%a3%e3%81%a8%e8%a1%a8%e7%a4%ba%e3%81%99%e3%82%8bjquery%e3%83%97/</link>
		<comments>http://www.detelu.com/blog/2011/02/%e3%83%9a%e3%83%bc%e3%82%b8%e9%81%b7%e7%a7%bb%e3%80%81%e8%aa%ad%e3%81%bf%e8%be%bc%e3%81%bf%e6%99%82%e3%81%ab%e3%81%b5%e3%82%8f%e3%81%a3%e3%81%a8%e8%a1%a8%e7%a4%ba%e3%81%99%e3%82%8bjquery%e3%83%97/#comments</comments>
		<pubDate>Mon, 14 Feb 2011 17:20:31 +0000</pubDate>
		<dc:creator>DETELU</dc:creator>
				<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.detelu.com/blog/?p=454</guid>
		<description><![CDATA[一年以上ぶりの更新です。ちょこっと他のブログはやっているんですが、こちらはずいぶん長い間放置してしまっていました。(コメント頂いていた方は申し訳ありません。。。) さて久々の記事ですが、ふとjQueryのプラグインでもつ [...]]]></description>
			<content:encoded><![CDATA[<p>
一年以上ぶりの更新です。ちょこっと他のブログはやっているんですが、こちらはずいぶん長い間放置してしまっていました。(コメント頂いていた方は申し訳ありません。。。)<br />
<br />
さて久々の記事ですが、ふとjQueryのプラグインでもつくろうかなと思い、いまさらながら簡単なものを練習がてらつくってみました。<br />
<br />
プラグインの動作は、<br />
・ページ読み込み時にフェードインする。<br />
・アンカーをクリックし次のページに移る前に現在のページをフェードアウトするというものです。<br />
<br />
※2011年2月15日に下記を修正<br />
・処理をさせないようにするclassを指定できるようにしました。ページ内リンク対策です。<br />
<br />
※2011年2月16日<br />
・ブラウザーで戻ったときにfadeOutしたままになってしまう部分の処理がうまくできず使えないので配布やめました。setIntervalで処理させればいけるのかな？また落ち着いたときに作り直そう。。。<br />
<br />
※2011年7月11日<br />
「window.onunload = function () {}」を追加することで解決したので公開しました。<br />
<br />
<a href="http://www.detelu.com/blog/2011/07/fademover/">ページ遷移、読み込み時にふわっと表示するjQueryプラグインを修正</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.detelu.com/blog/2011/02/%e3%83%9a%e3%83%bc%e3%82%b8%e9%81%b7%e7%a7%bb%e3%80%81%e8%aa%ad%e3%81%bf%e8%be%bc%e3%81%bf%e6%99%82%e3%81%ab%e3%81%b5%e3%82%8f%e3%81%a3%e3%81%a8%e8%a1%a8%e7%a4%ba%e3%81%99%e3%82%8bjquery%e3%83%97/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.detelu.com/blog/2011/02/%e3%83%9a%e3%83%bc%e3%82%b8%e9%81%b7%e7%a7%bb%e3%80%81%e8%aa%ad%e3%81%bf%e8%be%bc%e3%81%bf%e6%99%82%e3%81%ab%e3%81%b5%e3%82%8f%e3%81%a3%e3%81%a8%e8%a1%a8%e7%a4%ba%e3%81%99%e3%82%8bjquery%e3%83%97/" />
	</item>
	</channel>
</rss>

