ページ内リンク(#)でアクセスしたときに、特定のモーダルを開いたり、スライダーで特定スライドに移動する方法
そろそろ春だね。
みんなコード書いてる?
最近は勉強会のレポートばっかで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ですね。