ページ内リンクしたマークアップでページ分割する
「section」ごとにページを分割します。
それぞれにidを割り振り、そのidに飛ぶように「nav」にはリンクを付けます。
普通のページ内リンクですね。
html
<ul class="nav"> <li><a href="#c1">1</a></li> <li><a href="#c2">2</a></li> <li><a href="#c3">3</a></li> <li><a href="#c4">4</a></li> </ul> <div id="c1" class="section"> <h2>SECTION 01</h2> <p> 長いページの場合、アンカー名をつけてページ内リンクをする場合があると思います。 </p> </div> <div id="c2" class="section"> <h2>SECTION 02</h2> <p> そのままのマークアップでページを分割してボタンで切り替える方法をご紹介します。 </p> </div> <div id="c3" class="section"> <h2>SECTION 03</h2> <p> 長いページの場合、アンカー名をつけてページ内リンクをする場合があると思います。 </p> </div> <div id="c4" class="section"> <h2>SECTION 04</h2> <p> そのままのマークアップでページを分割してボタンで切り替える方法をご紹介します。 </p> </div>
jQueryの部分です。
読み込まれたら最初の「section」だけ表示している状態にします。
ボタンがクリックされたら表示されている「section」を非表示にして、クリックされた「section」を表示してるだけですね。
javascript
$(function() {
var pages = $('.section');
//sectionを全て非表示
pages.hide();
//最初のsectionを表示
pages.eq(0).fadeIn();
$('.nav a').click(function(event){
event.preventDefault();
var nextPage = this.hash;
pages.hide();
$(nextPage).fadeIn();
});
});
ナビゲーションを自動で作成する
せっかくjQueryを使用しているので次は最低限のマークアップでナビゲーションなどは自動で作成してみます。
html
<div class="section"> <h2>SECTION 01</h2> <p> 長いページの場合、アンカー名をつけてページ内リンクをする場合があると思います。 </p> </div> <div class="section"> <h2>SECTION 02</h2> <p> そのままのマークアップでページを分割してボタンで切り替える方法をご紹介します。 </p> </div> <div class="section"> <h2>SECTION 03</h2> <p> 長いページの場合、アンカー名をつけてページ内リンクをする場合があると思います。 </p> </div> <div class="section"> <h2>SECTION 04</h2> <p> そのままのマークアップでページを分割してボタンで切り替える方法をご紹介します。 </p> </div>
今度はidも割り当ててないので、まずはidを割り当てて「section」の数だけナビゲーションリストを作成します。
javascript
$(function() {
var pages = $('.section');
pages.hide();
//最初のsectionを表示
pages.eq(0).fadeIn();
//ナビゲーション
pages.parent().prepend('<ul class="nav"></ul>');
pages.each(function (i) {
//ナビゲーションリスト追加
$('.nav').append('<li><a href="#c'+( i+1 )+'">'+( i+1 )+'</a></li>');
//連番idの追加
$(this).attr('id', 'c'+(i+1));
});
$('.nav a').click(function(event){
event.preventDefault();
var nextPage = this.hash;
pages.hide();
$(nextPage).fadeIn();
});
});
ちなみにクリックしたa要素の「#」を取得は「this.hash」じゃなくて「$(this).attr(‘href’)」でもよさそうですが、appendで追加した要素だとieの場合はフルパスになってしまうようです。
指定要素を最初に開く
今までのサンプルは最初の要素がはじめに開きますが、他ページから「index.html#c2」というリンクにして最初に指定要素を開きたい場合があります。
5行目の「pages.eq(0).fadeIn();」を削除して、14行目のクリックイベントの前に以下を追加します。
javascript
//URLに#がついてたら該当しているidを開く
if ( location.hash ) {
$('html,body').scrollTop(0);
$(location.hash).fadeIn();
} else {
pages.eq(0).fadeIn();
}

