###前提
レスポンシブでグローバルナビゲーションを作っています。
ウィンドウの幅をドラッグして大きくしたり小さくしたりした場合に、リアルタイムでウィンドウ幅を感知して、スマートフォン、PCサイトで異なる動きをさせたく思っていますがうまくいきません。
※ウィンドウ幅感知の部分をのぞけば意図通りの動作をしています。
###実現させたい仕様
■スマートフォン(767pxまで)
二階層目があり、それも開閉
会社概要 ↓
商品 ↓
それぞれをクリックしたら二階層目が展開する。
矢印の向きが「↑」に変化し、クリックしたら再び閉じて「↓」になる。
会社概要 ↑
沿革
地図
商品 ↑
商品A
商品B
■PCサイト(768px以上)
クリックしても二階層目は開閉させない。
| 会社概要 | 商品 |
###現在の記述 ※「Window幅を感知して処理を変える」以外の部分は意図通り動作する
HTML
1<ul> 2 <li class="dropdown"><a href="#" class="open">会社概要</a> 3 <ul> 4 <li><a href="#">沿革</a></li> 5 <li><a href="#">地図</a></li> 6 </ul></li> 7 <li class="dropdown"><a href="#" class="open">商品</a> 8 <ul> 9 <li><a href="#">商品A</a></li> 10 <li><a href="#">商品B</a></li> 11 </ul></li> 12</ul>
JavaScript
1$(window).on('load resize', function(){//window幅に変更があった場合に感知させたい(が、うまくいっていない) 2 if( window.matchMedia('(max-width:767px)').matches ){//スマートフォンの場合 3 $('.dropdown').on('click','> .open', function(e){ 4 e.preventDefault(); 5 $(this).next('ul') 6 .slideDown('fast', function(){ 7 $(this).prev('.open').removeClass().addClass('close'); 8 }) 9 }).on('click','> .close', function(e){ 10 e.preventDefault(); 11 $(this).next('ul') 12 .slideUp('fast', function(){ 13 $(this).prev('.close').removeClass().addClass('open'); 14 }) 15 }); 16 }else{//それ以外(PCの場合) 17 $('.dropdown').children('a').next('ul').hide(); 18 } 19});
CSS
1@media only screen and (max-width: 767px) { 2 .dropdown > .open::after { 3 content: '↓'; 4 } 5 .dropdown > .close::after { 6 content: '↑'; 7 } 8} 9@media only screen and (min-width: 768px) { 10 .dropdown ul{ 11 //今のところ特に何も記述はしていないが display:none !important;を入れるべき?(後述) 12 } 13}
上記の記述で、PC幅でリロード、スマートフォン幅でリロードした場合、それぞれ意図した動きになっています。
ただ、ウィンドウの幅をマウスをドラッグして変更した時下記の動きになります。
①最初PCウィンドウ→②スマートフォンサイズにせまくする→③再びPCウィンドウサイズにする
①、②までは意図通りの動きをします。
③になると「会社概要」や「商品」をクリックすると二階層目が展開されるようになってしまいます。
###補足
そもそもウィンドウの幅を任意で変えるユーザーはいないような気もしますのでこのような処理は必要ないのかもしれませんが向学のため、なぜ条件分岐通りに動かないのか知りたく思っています。
またCSSのメディアクエリ「min-width:768px」で二階層目のメニューを「display: none !important;」で非表示にしたら良いかとも思ったのですが、
①最初PCウィンドウ→②スマートフォンサイズにせまくする→③再びPCウィンドウサイズにする
上記のステップの①で一階層目のメニューをクリックしてから②にすると二階層目が展開されない状態で矢印が上を向いてしまいます。
ウィンドウサイズを変更した場合、リロード無しでPC⇔スマートフォンでそれぞれ仕様通りの動きを反映させるにはどのように記述をするべきなのでしょうか?ご教授いただけますと助かります。どうぞよろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/16 07:07