【jQuery】タブ切り替えの際に、上下連動タブ

Movable Typeで複数カテゴリを「タブ」にして、「要素」を各カテゴリのリスト(記事一覧)とします。
上下の「タブ」をクリックすると、上下の「タブ」が連動しつつ、「タブ」ごと「要素」が切り替わる動きの実装です。
下の「タブ」をクリックすると、上の「タブ」の位置までスムーススクロールするようにしました。

上下連動タブ

HTML

<ul class="tab top" id="TOP">
	<li>すべて</li>
	<li>カテゴリA</li>
	<li>カテゴリB</li>
	<li>カテゴリC</li>
	<li>カテゴリD</li>
	<li>カテゴリE</li>
	<li>カテゴリF</li>
	<li>その他</li>
</ul>
<div class="contents">
	<div class="content">「すべて」の記事一覧</div>
	<div class="content">「カテゴリA」の記事一覧</div>
	<div class="content">「カテゴリB」の記事一覧</div>
	<div class="content">「カテゴリC」の記事一覧</div>
	<div class="content">「カテゴリD」の記事一覧</div>
	<div class="content">「カテゴリE」の記事一覧</div>
	<div class="content">「カテゴリF」の記事一覧</div>
	<div class="content">「その他」の記事一覧</div>
</div>
<ul class="tab bottom">
	<li data-url="#TOP">すべて</li>
	<li data-url="#TOP">カテゴリA</li>
	<li data-url="#TOP">カテゴリB</li>
	<li data-url="#TOP">カテゴリC</li>
	<li data-url="#TOP">カテゴリD</li>
	<li data-url="#TOP">カテゴリE</li>
	<li data-url="#TOP">カテゴリF</li>
	<li data-url="#TOP">その他</li>
</ul>

※こちらも一緒にご覧ください。→「【Movable Type】横並びカテゴリリンクをウィンドウサイズに%で横幅均等

jQuery

$(function() {
	$('.tab>li').click(function() {
		var num = $(this).parent().children('li').index(this);
			$('.tab').each(function(){
			$('>li',this).removeClass('current').eq(num).addClass('current');
		});
		$('.contents .content').hide().eq(num).show();
	}).first().click();
	$('.tab.bottom>li').click(function() {
		var href= $(this).attr('data-url');
		var target = $(href == "#" || href == "" ? 'html' : href);
		$("html,body").animate(1000 ,"easeOutQuint");
		return false;
	});
});

参考:上下連動タブ
※「.tab.bottom」からタブ切り替えを行う際には、「#TOP」の位置までスムーススクロールするようにしています。

また、ページ固定ヘッダーなどがある場合には

	$('.tab.bottom>li').click(function() {
		var headerHight = 100; //ページ固定ヘッダの高さ
		var href= $(this).attr('data-url');
		var target = $(href == "#" || href == "" ? 'html' : href);
		var position = target.offset().top-headerHight; //ヘッダの高さ分位置をずらす
		$("html,body").animate({scrollTop:position}, 1000 ,"easeOutQuint");
		return false;
	});

こんな感じにヘッダの高さ分位置を下にずらします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください