###前提・実現したいこと
レスポンシブデザインの制作にて、
ナビゲーション部分の動作がうまくいかずに困っておりますので、助けていただけると幸いです。
よろしくお願い致します。
ナビゲーション部分ですが、
【 PCレイアウトの場合 】
各ナビゲーションにマウスオーバーすると、ポップアップでサブナビゲーションを表示
【 スマホレイアウトの場合 】
各ナビゲーションをクリックすると、アコーディオン形式でサブナビゲーションを表示
の様に動作させたいのですが、
PCレイアウトの際は動作に問題ないのですが、
スマホレイアウトになりますと、クリックではなくマウスオーバーでサブナビゲーションが表示されてしまいます。
また、ナビゲーションをクリックしますと、開いたり・閉じたりを繰り返してしまいます。
現状のコードは以下となっております。
html
1<div id="gnav"> 2 <nav> 3 <ul> 4 <li class="popup"><a href="" class="trigger"><span>ナビゲーション_a</span></a> 5 <div class="drop gNavSub"> 6 <div id="gns1" class="gnSubInner"> 7 <div class="gnsBox clf"> 8 <p class="gnTop"><a href="">aのサブナビゲーション</a></p> 9 <ul class="gnsList"> 10 <li class="gnNews1"><a href="">aのサブナビゲーション</a></li> 11 <li class="gnNews2"><a href="">aのサブナビゲーション</a></li> 12 <li class="gnNews3"><a href="">aのサブナビゲーション</a></li> 13 </ul> 14 </div> 15 </div> 16 </div> 17 </li> 18 <li class="popup"><a href="" class="trigger"><span>ナビゲーション_b</span></a> 19 <div class="drop gNavSub"> 20 <div id="gns1" class="gnSubInner"> 21 <div class="gnsBox clf"> 22 <p class="gnTop"><a href="">bのサブナビゲーション</a></p> 23 <ul class="gnsList"> 24 <li><a href="">bのサブナビゲーション</a></li> 25 <li><a href="">bのサブナビゲーション</a></li> 26 <li><a href="">bのサブナビゲーション</a></li> 27 <li><a href="">bのサブナビゲーション</a></li> 28 </ul> 29 </div> 30 </div> 31 </div> 32 </li> 33 <li><a href="">ナビゲーション_c</a></li> 34 </ul> 35 <p><a href="">ナビゲーション_d</a></p> 36 </nav> 37</div>
javascript
1$(function() { 2 3 setSize(); 4 5 $(window).resize(function() { 6 setSize(); 7 }); 8 9}); 10 11function setSize() { 12 13 var w = $(window).width(); 14 var x = 765; 15 16 //765px以下の場合 17 if (w <= x) { 18 19 //gNav 20 $(function(){ 21 //以下、スマホレイアウトの際のハンバーガーメニューの表示・非表示の切り替えとなります。 22 $('nav').css('display', 'none'); 23 $('#spNav').click(function () { 24 $('#spNav').css('display', 'none'); 25 $('#spClose').css('display', 'block'); 26 $('nav').fadeIn(200); 27 }); 28 $('#spClose').click(function () { 29 $('#spNav').css('display', 'block'); 30 $('#spClose').css('display', 'none'); 31 $('nav').fadeOut(200); 32 }); 33 34 //以下、スマホレイアウトの際のアコーディオン形式でサブナビゲーションを表示・非表示の切り替えとなります。 35 $(".gNavSub").css("display","none"); 36 $(".popup > .trigger").on("click", function() { 37 $(this).next().slideToggle('slow'); 38 return false; 39 }); 40 }); 41 42 43 //765px以上の場合 44 } else { 45 //以下、PCレイアウトの際のポップアップでサブナビゲーションを表示・非表示の切り替えとなります。 46 $('nav').css('display', 'block'); 47 $(function(){ 48 $(".popup").mouseenter(function(){ 49 $(this).siblings().find(".gNavSub").hide(); 50 $(this).children().fadeIn(0); 51 }); 52 53 $('.popup').mouseleave(function() { 54 $('.gNavSub').fadeOut(0); 55 }); 56 }); 57 } 58}
PCにて、PCレイアウトからウィンドウ幅を変更した際に再読み込みしますと、
スマホレイアウトのナビゲーション動作は問題ありませんが、再読み込みせずにナビゲーションが正常に動作できればと思います。
PCレイアウト時のマウスオーバーの記述がスマホレイアウトの際にも有効となり、スマホレイアウトのナビゲーションがマウスオーバーでも動作しているのかと思い、スマホレイアウトの際に「mouseenter」「mouseleave」の適用を解除できればスマホのナビゲーションも正常に動作すると考えたのですが、そもそも、その考え方で合っていますでしょうか?
その場合は、調べてみたところ「preventDefault()」「stopPropagation()」「return false;」辺りを利用し、
適用を解除する様な形になるのかと思うのですが、どこにどう記述したら良いものか分かりません…。
(この考え方も合っていますでしょうか?)
そもそも、スマホレイアウトの際に「mouseenter」「mouseleave」の適用を解除するという考え方が合っているのか、
私の初心者知識ですと、それ以外に思いつかない状態です。
何か参考になるアドバイスをいただけると幸いでございます。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/17 04:40
2017/08/18 19:22
2017/08/24 03:19