いつもお世話になっております。
モーダルメニューの開閉の際、
開いたときと閉じた時に属性値を追加したり削除したりするなどの
処理を加えたいと思っています。
やりたいこと。
1▼
webサイトにモーダルメニューを実装して、
.menu-mobile をクリックしたらメニューが開くようにする。
これは問題なくできております。
2▼
.menu-mobileをクリックしたら、.mega-menu.openを
mega-menu.closeに切り替える
これをtoggleClassで動作させてました。
3▼
.open .menu-mobileをクリック(メニューを開く)したら
1番の処理 をして、
bodyに .fixed を追加して、ページの高さ分を計算して調整し
現在表示しているメインコンテンツの位置が動かないようにする。
4▼
.close .menu-mobile をクリック(メニュー閉じる)したら
2番の処理 を行って
bodyから .fixed を削除して、ページの高さ分を計算して調整し
勝手にページトップに戻らないようにする。
現在の状況
3 まではうまくいくのですが、
4がうまく動作ません。
4のクリックをすると、removeClassは動かず(fixedが削除されない)、
ページの一番上に戻ってしまいます。
htmlは下記のような状態です。
あらかじめ、div.mega-menuに 予め open という属性値を入れておいて、
toggleClass によって open と close を切り替えています。
html
1 <div class="mega-menu open"> 2 3<!-- ↓下をクリックすると↑のmega-menuのopenの部分がクリックするたびにcloseとopenで切り替わります --> 4 <a href="#" class="menu-mobile"></a> 5 6 7 <ul style="display: block;"> 8 <li><a href="#">Home</a></li> 9 <li class="menu-dropdown-icon"><a href="">About</a> 10 <ul> 11 <li><a href="">School</a> 12 <ul> 13 <li><a href="">Lidership</a></li> 14 </ul> 15 </li> 16 <li><a href="#">Study</a> 17 <ul> 18 <li><a href="#">Undergraduate</a></li> 19 </ul> 20 </li> 21 <li><a href="#">Research</a> 22 <ul> 23 <li><a href="#">Undergraduate research</a></li> 24 </ul> 25 </li> 26 <li><a href="#">Something</a> 27 <ul> 28 <li><a href="#">Sub something</a></li> 29 </ul> 30 </li> 31 </ul> 32 </li> 33 <li class="menu-dropdown-icon"><a href="">News</a> 34 <ul class="normal-sub"> 35 <li><a href="">Today</a></li> 36 </ul> 37 </li> 38 <li class="menu-dropdown-icon"><a href="">Contact</a> 39 <ul> 40 <li><a href="#">School</a> 41 <ul> 42 <li><a href="#">Lidership</a></li> 43 </ul> 44 </li> 45 <li><a href="#">Study</a> 46 <ul> 47 <li><a href="#">Undergraduate</a></li> 48 </ul> 49 </li> 50 <li><a href="#">Study</a> 51 <ul> 52 <li><a href="#">Undergraduate</a></li> 53 </ul> 54 </li> 55 <li><a href="#">Empty sub</a></li> 56 </ul> 57 </li> 58 </ul> 59 60 61</div>
該当部分のjQueryは以下のような状態です。
jQuery
1jQuery(function($){ 2 3// menu-mobileをクリックしたときにmega-menuにopenかcloseを追加する。 4 5$(".menu-mobile").click(function (e) { 6$(".mega-menu").toggleClass('open'); 7$(".mega-menu").toggleClass('close'); 8$(".mega-menu > ul").slideToggle('show-on-mobile'); 9e.preventDefault(); 10}); 11 12// 1番 openが追加されているときの処理(これは動作します) 13var scrollPosition; 14$(".open .menu-mobile").on("click", function() { 15scrollPosition = $(window).scrollTop(); 16$('body').addClass('fixed').css({'top': -scrollPosition}); 17}); 18 19// 2番 closeが追加されているときの処理はこうしたいです(動作しません) 20$(".close .menu-mobile").on("click", function() { 21$('body').removeClass('fixed').css({'top': 0}); 22window.scrollTo( 0 , scrollPosition ); 23}); 24 25 26});
どのようにすれば記述するとよいのでしょうか。
調べてもどうしてもわかりませんでした。どうぞよろしくおねがいします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/17 05:58 編集
2020/05/17 06:47
2020/05/17 07:46
2020/05/17 09:21
2020/05/17 11:08