// 選択されたtabを取得する関数(hrefの=以降を取得->tabs1, tab2)
function parseHashBangArgs(aURL) {
var tab = aURL.slice(aURL.indexOf('=') + 1);
return tab;
}
// 今回は2タブだったので配列の内容を決め打ち
// 表示、非表示のコンテンツを決めるのに使う
function createTabsArray() {
var tabs = ['#tab1', '#tab2'];
return tabs;
}
// 選択「前」のタブ情報を非表示化するのに必要
// 例えば現在がtab1で遷移後がtab2の場合、tab2をクリックしたらtab1を消すということを実現したい
// tab2を選択した瞬間、tab2の情報が上記の配列から消えるので#tab1が残る。この#tab1に対してfadeOut()をかけることで不要なタブ情報を瞬時に非表示化できる
function switchContent(selectedConte) {
var tabs = createTabsArray();
var tab = '#' + selectedConte;
for (i=0; i<tabs.length; i++) { //delete not current content
if (tabs[i] == tab ) {
tabs.splice(i, 1);
}
}
return tabs;
}
// リロード時
$(function() {
// リロード前に保存されたタブIDを取得(初回アクセス時は未保存なので2つのタブともに選択されていない状態)
var currentTab = localStorage.getItem('current');
if (currentTab) {
// 毎回リロード時に選択されているとするclassのcurrentを削除しlocalStorageの情報を元に再付与している(ちょっと非効率かも)
$('li a').removeClass('current');
var tabli = currentTab.replace(/tab/, 'tabs');
$('#' + tabli).addClass('current');
var tabs = switchContent(currentTab);
// currentクラスを持つコンテンツは表示、そうじゃないのは非表示にしている
// fadeを使う理由は無いので表示時間を0にするならshowを使えば良いかも知れない
$('#tabContent' + ' ' + '#' + currentTab).fadeIn(0);
$('#tabContent' + ' ' + tabs).fadeOut(0);
} else {
$('#tabContent' + ' ' + '#tab1').fadeIn(0);
}
});
// タブのクリック時
// タブを選択すると選択したタブのhrefからどのタブが選択されたかを取得
// リロード同様に一度すべての選択状態を解除してから再付与
// 最後にlocalStorageに選択したタブの情報を保存
$('#tabs li a').click(function() {
delMsg();
var url = $(this).attr('href');
var selectedTab = parseHashBangArgs(url);
var selectedConte = selectedTab.replace(/tabs/, 'tab');
if (selectedTab) {
$('li a').removeClass('current');
$('#' + selectedTab).addClass('current');
var tabs = switchContent(selectedConte);
$('#tabContent' + ' ' + '#' + selectedConte).fadeIn(0);
$('#tabContent' + ' ' + tabs).fadeOut(0);
localStorage.setItem('current', selectedConte);
}
});