ページ内リンク(#)でアクセスしたときに、特定のモーダルを開いたり、スライダーで特定スライドに移動する方法

そろそろ春だね。
みんなコード書いてる?

最近は勉強会のレポートばっかでtipsから随分遠ざかってた感じですが、久しぶりに投稿してみます。

モーダルとかスライダーの設置する案件があると、どうしても他のページからのリンクが出てきますよね。
それが、単にページへのリンクだといいんだけど、

モーダルの場合

index.html#sample01

こんなリンクが貼られていて、ハッシュつきでアクセスがあった場合、「#sample01」のモーダルが開かれるようにしたい

スライダーの場合

index.html#sample01

こちらもこんなリンクが貼られていて、「#sample01」のIDが指定してあるスライドからスタートしたい

こんなことがよくあるんじゃないかと思います。
今さらこんなん誰でも知ってるでしょとも思うんですが、困ってる人もいるかもしれないのでメモしておきますね。

モーダルを開きたい場合

html

<p>本文本文本文本文本文本文本文</p>

<div class="panel" id="sample01" style="display:none;">
<div class="txt">
<h2>sample01のコンテンツ</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Reiciendis, praesentium, nesciunt, vel aspernatur a minus corporis magnam magni possimus culpa quo eum tempore neque omnis dolorem expedita quod? Vero, officiis.<br>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Reiciendis, praesentium, nesciunt, vel aspernatur a minus corporis magnam magni possimus culpa quo eum tempore neque omnis dolorem expedita quod? Vero, officiis.<br>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Reiciendis, praesentium, nesciunt, vel aspernatur a minus corporis magnam magni possimus culpa quo eum tempore neque omnis dolorem expedita quod? Vero, officiis.</p>
</div><!-- / .txt -->
</div><!-- / .panel -->

javascript

$(function() {
	if (location.hash){
		var target = location.hash;
		console.log(target);  // targetの値は「#sample01」
		$.fancybox.open(target);
	}
});

 

if (location.hash){ }

この条件を入れてあげれば、http://www.○○○○.com/modal/index.html#sample01というリンクURL文字列のうちハッシュ(#)以降が「location.hash」で取得できます。

どちらも同じhtmlにジャンプしますが、ハッシュがあると該当のモーダルが表示されると思います。
意外に簡単に設置できるので、ご自身のよく使うjsにモジュールとして入れておくといいかもしれませんね。

 

指定スライドに移動したいとき

html

<ul class="bxslider">
	<li id="sample01">画像</li>
	<li id="sample02">画像</li>
	<li id="sample03">画像</li>
</ul>

javascript

$(function() {
	
if (location.hash){
	var targetSlide = location.hash.replace("#sample0",""); // 各スライダーの連番を取得
	$('.bxslider').bxSlider({
		mode: 'horizontal',
		captions: false,
		onSliderLoad:function(currentIndex){
			goToSlide(targetSlide);
    }
	});
	}  else {
	$('.bxslider').bxSlider({
		mode: 'horizontal',
		captions: false
	});
} // end else

});

今回はbxsliderをサンプルとしています。
それぞれスライダーのライブラリには、

  • ロードした時のタイミング
  • スライドを移動させる前後のタイミング

など、それぞれアクションを設定できるようなオプションがあります。

そこに今回のようにハッシュから取得した番号を元に、指定スライドへ移動する処理をくわえてあげればOKですね。

コメントを残す

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