前提・実現したいこと
クリッカブルマップを利用して、
指定エリアをクリックしたら、2重のアコーディオンを開いた状態でその箇所へ移動したいです。(同一ページ内)
例えば、画像上にクリッカブルマップで「東京」を作成しクリックした場合に、
アコーディオンの「エリア1」の中の「東京」の位置へアコーディオンが開かれた状態でページ内移動したいです。
クリッカブルマップは画像上の任意の場所をクリックできる「クリッカブルマップ」の使い方こちらを参考に作成しました。
アコーディオンは多階層のメニューこちらを参考に作成しました。
クリッカブルマップで作成した該当のareaを1度クリックするとURLにハッシュがつくのみで何も反応がなく、
2度目をクリックするとアコーディオンが開きます。
これを1度目のクリックでアコーディオンが開くようにしたいです。
また、該当のareaをクリックしても、指定の場所に移動しないので正しく移動するようにしたいです。
有識者の方いらっしゃいましたら、お力添えをいただけると助かります。
どうぞ宜しくお願い致します。
該当のソースコード
html
1<div class="section01"> 2 <div class="inner"> 3 <figure> 4 <!-- Image Map Generated by http://www.image-map.net/ --> 5 <img src="/assets/img/shop/map_img01.png" alt="" usemap="#image-map"> 6 7 <map name="image-map"> 8 <area alt="1" title="1" href="#osaka" coords="357,782,484,828" shape="rect"> 9 <area alt="2" title="2" href="#tokyo" coords="506,782,1254,1157" shape="rect"> 10 <area alt="3" title="3" href="#fukuoka" coords="546,382,34254,1434" shape="rect"> 11 <area alt="4" title="4" href="#hokkaido" coords="206,334,3454,1556" shape="rect"> 12 </map> 13 </figure> 14 </div> 15</div> 16<div class="section02"> 17 <div class="inner"> 18 <ul class="accordion"> 19 <li class="ac_sub-content"> 20 <p class="ac_title ac1">エリア1</p> 21 <ul class="accordion_inner"> 22 <li class="ac_sub ac1-1"> 23 <p class="ac_sub-title" id="osaka">大阪</p> 24 <ul> 25 <li class="ac_sub-content"> 26 <p>ホゲホゲ</p> 27 </li> 28 </ul> 29 </li> 30 <li class="ac_sub ac1-2"> 31 <p class="ac_sub-title" id="tokyo">東京</p> 32 <ul> 33 <li class="ac_sub-content"> 34 <p>ホゲホゲ</p> 35 </li> 36 </ul> 37 </li> 38 </ul> 39 </li> 40 <li class="ac_sub-content"> 41 <p class="ac_title ac2">エリア2</p> 42 <ul class="accordion_inner"> 43 <li class="ac_sub ac2-1"> 44 <p class="ac_sub-title" id="fukuoka">福岡</p> 45 <ul> 46 <li class="ac_sub-content"> 47 <p>ホゲホゲ</p> 48 </li> 49 </ul> 50 </li> 51 <li class="ac_sub ac2-2"> 52 <p class="ac_sub-title" id="hokkaido">北海道</p> 53 <ul> 54 <li class="ac_sub-content"> 55 <p>ホゲホゲ</p> 56 </li> 57 </ul> 58 </li> 59 </ul> 60 </li> 61 </ul> 62 </div> 63</div>
js
1$(function () { 2 3 //.accordionの中の.ac_titleがクリックされたら 4 $('.accordion .ac_title').click(function () { 5 6 //クリックされた.accordionの中の.ac_titleに隣接するul要素が開いたり閉じたりする。 7 $(this).next('ul').slideToggle(); 8 //クリック場所のアイコン(+.-)の切り替え 9 $(this).toggleClass("active"); 10 11 }); 12 13 //.accordionの中の.accordion_innerの中のli要素の中の.ac_sub-titleがクリックされたら 14 $('.accordion .accordion_inner li .ac_sub-title').click(function () { 15 16 //クリックされた.accordionの中の.innerの中のli要素の中の.ac_sub-titleに隣接するul要素が開いたり閉じたりする。 17 $(this).next('ul').slideToggle(); 18 //クリック場所のアイコン(+.-)の切り替え 19 $(this).toggleClass("active"); 20 }); 21 22 23 24 // areaを押すと、 25 // アンカーリンクしてアコーディオン開閉 26 $(".section01 area").click(function () { 27 //一旦全てのアコーディオン閉じる 28 $(".accordion ul").hide(); 29 $(".ac_title").removeClass("active"); 30 $(".ac_sub-title").removeClass("active"); 31 32 //ハッシュ取得 33 var hash = $(location).attr("hash"); 34 console.log(hash); 35 //アンカーリンクのズレを補正 36 var headerHeight = 200; 37 var position = $(hash).offset().top - headerHeight; 38 console.log(position); 39 $("html, body").animate({ scrollTop: position }, 550, "swing"); 40 //アコーディオン処理 41 $(hash).closest("ul").slideToggle(); 42 $(hash).next("ul").slideToggle(); 43 }); 44}); 45
回答1件
あなたの回答
tips
プレビュー