HTML5 History APIを調べることをお勧めします。開始方法に関するチュートリアルはたくさんありますが、基本的な要点は、jQuery で新しい「ページ」をロードするときに、それを履歴スタックにプッシュすることです。
// After loading the new page...
window.history.pushState({}, '', 'newpage.html');
これにより、ページが読み込まれなくても、ユーザー エージェントyoursite.com/newpage.html
が URL バーに表示されます。
Caniuse は、history API のサポートがかなり優れていると報告しています。通常の容疑者 (IE 7 および 8) はサポートされていませんが、ポリフィルが 利用可能です。
History API に関する唯一の注意事項 (これは重要な注意事項です) は次のとおりですhistory.pushState
。ユーザーは URL バーから URL をコピーして共有することができるため、ページ名は実際のページに対応している必要があります。これに関する問題は、動的にロードする個別のページがないため、実際にはサイトで機能するようには見えないことです。
あなたのポートフォリオは 1 つの連続したページのように見えるので、そのためにはハッシュ URL を使用することをお勧めします。つまり、yoursite.com/#about
やのような URLyoursite.com/#contact
です。新しいページをロードするときにハッシュを含めるように更新できwindow.location
ます (ブラウザはページを再ロードしません)。
window.location = '#new-page-that-was-just-navigated-to';
または、単に更新することもできますwindow.location.hash
。このプロパティを使用してサイトを読み込むときに、javascript を使用してハッシュの内容を調べて、表示するページを決定できます。
$(document).ready(function() {
switch(window.location.hash) {
case 'home': // load home
case 'about': // load about
default: // load default page (index)
}
});
さらに、HashChange イベントを使用して HTML から JS を抽象化できます(ポリフィルはMDN ドキュメント ページで利用できます)。これを行う代わりに:
<a href="javascript:void(0);" id="about">About</a>
<a href="javascript:void(0);" id="projects">Projects</a>
<a href="javascript:void(0);" id="contact">Contact</a>
<script>
document.getElementById('about').addEventListener('click', function() {
// navigate to about page
}, false);
document.getElementById('projects').addEventListener('click', function() {
// navigate to projects page
}, false);
//etc.
</script>
代わりにこれを行うことができます:
<a href="#about" id="about">About</a>
<a href="#projects" id="projects">Projects</a>
<a href="#contact" id="contact">Contact</a>
<script>
window.addEventListener('hashchange', function() {
switch(window.location.hash) {
case 'about': // load page
case 'projects': // load page
case 'contact': // load page
default: // not found
}
}, false);
</script>
これの利点は、リンクに意味のある href があり、サイトの各リンクにイベント リスナーを追加する必要がないことです。ハッシュを割り当ててリッスンするだけですhashchange
。
編集
これは jQuery でも機能することに注意してください。
$(window).on('hashchange', function() {
switch(window.location.hash) {
case 'about': // load page
case 'projects': // load page
case 'contact': // load page
default: // not found
}
});