2018.04.20WEB - jQuery

jQueryを使って別ページのアコーディオン(もどき)を開く

新着情報をホームに出し、クリックしたらお知らせ一覧ページの該当箇所へスクロール+内容がアコーディオンのように開く…という要望をいただいたので書いてみました。

操作する側のHTML

<a href="/test/?entry=entry9">entry9を開く</a>|
<a href="/test/?entry=entry10">entry10を開く</a>|
<a href="/test/?entry=entry11">entry11を開く</a>

共通jQuery

$(function() {
	var enrtyurl = $(location).attr('href');
	setTimeout(function() {
		if(enrtyurl.indexOf("/?entry=") != -1) {
			var enrtyid = enrtyurl.split("?entry=");
			if(enrtyid) {
				$('#' + enrtyid[1]).slideDown(500);
			}
		}
		if(enrtyid) {
			var $target = $('#' + enrtyid[1]);
			if($target.length) {
				var pos = $target.offset().top;
				$("html, body").animate({scrollTop:pos}, 850);
			}
		}
	},100);
});

操作される側のHTML

<ul>
	<li>
		<a href="?entry=entry9">entry9</a>
		<div class="content" id="entry9">entry9の内容</div>
	</li>
	<li>
		<a href="?entry=entry10">entry10</a>
		<div class="content" id="entry10">entry10の内容</div>
	</li>
	<li>
		<a href="?entry=entry11">entry11</a>
		<div class="content" id="entry11">entry11</div>
	</li>
</ul>

操作される側のCSS

.content {
	display: none;
}

操作される側のjQuery(共通jQueryに足して)

$(function() {
	$('a[href*="?entry="]').click(function() {
		var enrtyurl = $(this).attr("href");
		var enrtyid = enrtyurl.split("?entry=");

		$('.content').slideUp(500);
		if($('#' + enrtyid[1]).css('display') == 'block') {
			$('#' + enrtyid[1]).slideUp(500);
		} else {
			$('#' + enrtyid[1]).slideDown(500);
		}
		return false;
	});
});

DEMO