質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

3490閲覧

スクロール途中から固定する追従メニューにてメニューボタンをクリックすると誤作動が

tamacom68

総合スコア13

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2019/02/11 14:10

スクロール途中から固定する追従メニューを作成中なのですが、スクロールでついたヘッダーのclassがメニューボタンをクリック消されてしまい、ヘッダーが固定でなくなってしまうためか、見えない所(スクロール固定になるため確かではないですが多分最上部?)で開いてしまいうまくいかない状況です。

クリックしてもヘッダーの.header-topについている.header_fixedが外されなけば問題なさそうなのですが、addclassでクラスを追加してみたりといろいろ試したのですが、クリックの処理の部分をうまく編集できませんでした。当方あまりというかほとんどコピペからのほんの少しカスタマイズ程度の知識がなく、お詳しい方ならなんてことないかもしれないのですが、ご教授いただけませんでしょうか?

【具体的にやりたいこと】

<div class="header-top">ヘッダー上部</div> ↑最上部ではここを残しながらメニューを表示したい。スクロールすると「ヘッダー上部」は 固定されずヘッダーのみ固定されてスクロールさせたい。

【使用しているライブラリ】
meanmenu.js

【参考にさせていただいたサイト】
「自分好みのレスポンシブの多階層メニューをつくる!meanmenu.jsをカスタマイズ+css」
https://webmoyou.com/web/703/

ほぼこちらのソースをカスタマイズさせていいただいてまして、コメントアウトに入っている
(これを追加しました)をこちらでは追加しただけになります。

JS

1$(function($){ 2 3// ヘッダー固定(これを追加しました) 4 var _window = $(window), 5 _header = $('#header'), 6 heroBottom; 7 8 _window.on('scroll', function () { 9 heroBottom = $('.header-top').height(); 10 if (_window.scrollTop() > heroBottom) { 11 _header.addClass('header_fixed'); 12 } else { 13 _header.removeClass('header_fixed'); 14 $("#label1").prop("checked", false); 15 } 16}); 17 18 19 //メニューの表示状態保管用 20 var state = false; 21 //.bodyのスクロール位置 22 var scrollpos = 0; 23 //meanmenuの状態による表示制御 24 function mm_control() { 25 if($('.mean-nav .nav').is(':visible')) { 26 //表示中 27 if(state == false) { 28 scrollpos = $(window).scrollTop(); 29 $('body').addClass('fixed').css({'top': -scrollpos}); 30 $('.mean-container').addClass('open'); 31 $('.mean-nav .mask').show(); 32 state = true; 33 } 34 } else { 35 //非表示中 36 if(state == true) { 37 $('body').removeClass('fixed').css({'top': 0}); 38 window.scrollTo( 0 , scrollpos ); 39 $('.mean-container').removeClass('open'); 40 $('.mean-nav .mask').hide(); 41 state = false; 42 } 43 } 44 } 45 46 $('#gNav').meanmenu({ 47 meanMenuContainer: "#header .h_nav", // メニューを表示させる位置 48 meanScreenWidth: "768" 49 }); 50 $(document) 51 .on('opend.meanmenu closed.meanmenu', function() { 52 mm_control(); 53 }) 54 .on('touchend click', '.mean-bar .mask', function(e) { 55 $('.mean-bar .meanmenu-reveal').trigger('click'); 56 return false; 57 }); 58 //ウィンドウサイズ変更によるメニュー非表示時の制御 59 $(window).on('resize', function() { 60 mm_control(); 61 }); 62});

css

1/* ヘッダー固定(これを追加しました) */ 2#header { 3 box-shadow: 0px 3px 15px rgba(0,0,0,0.2); 4 z-index: 99; 5 width: 100%; 6 position: relative; 7 top: 0; 8 left: 0; 9 background: #fff; 10} 11.mean-container .mean-bar { 12 width: 100%; 13 position: absolute; 14 background: none; 15 min-height: 60px; 16 z-index: 98; 17 top: 0; 18 left: 0; 19} 20#header.header_fixed { 21 position: fixed; 22}

html

1<body> 2 3 4<div class="header-top">ヘッダー上部</div> 5<header id="header"> 6 <div class="container"> 7 <div id="h_top"> 8 <div class="h_logo"><a href="#dummy">ロゴ</a> 9 </div> 10 <div class="h_nav"> 11 <nav id="gNav"> 12 <ul class="nav"> 13 <li> 14 <a href="">MENU<i class="fa fa-angle-down"></i></a> 15 <ul class="sub-menu"> 16 <li><a href="">submenu</a></li> 17 <li><a href="">submenu</a></li> 18 <li><a href="">submenu</a></li> 19 <li><a href="">submenu</a></li> 20 <li><a href="">submenu</a></li> 21 </ul> 22 </li> 23 <li> 24 <a href="">MENU<i class="fa fa-angle-down"></i></a> 25 <ul class="sub-menu"> 26 <li><a href="">submenu</a></li> 27 <li><a href="">submenu</a></li> 28 <li><a href="">submenu</a></li> 29 <li><a href="">submenu</a></li> 30 <li><a href="">submenu</a></li> 31 </ul> 32 </li> 33 <li><a href="">MENU</a></li> 34 <li><a href="">MENU</a></li> 35 <li><a href="">MENU</a></li> 36 </ul> 37 <div class="mask"></div> 38 </nav> 39 </div> 40 </div> 41 </div> 42</header> 43 44<main id="main" role="main"> 45 <section id="sec01"> 46 コンテンツ 47 </section> 48 <section id="sec01"> 49 コンテンツ 50 </section> 51</main> 52</body> 53

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

該当部分のstate = false;をstate = true;にしたら解決できました。

投稿2019/02/12 02:55

tamacom68

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問