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

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

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

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

Q&A

解決済

1回答

2392閲覧

モーダルウインドウ型ナビゲーションでスマホでの表示の時にスクロールできるようにしたいです。

jyoze

総合スコア48

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

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

0グッド

1クリップ

投稿2017/07/04 08:31

よく見かけるモーダルウインドウ型のナビゲーションを参考サイトを頼りに作成したのですが、
以下の記述だと、スマホで表示した時にメニューにスクロールが必用なデザインの場合、モーダルウインドウはスクロールされずに、下のコンテンツがスクロールされてしまいます。

以下の記述に付き足してスマートフォンでスムーズにスクロールできる方法はありますでしょうか。

<style> #js_btn { position: fixed; top: 20px; right: 20px; z-index: 2; } #js_nav { display: none; position: fixed; top: 0; left: 0; z-index: 1; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.8); } .open #js_nav { display: block; } @media only screen and (max-width: 768px) { #js_nav ul li { margin-bottom: 200px; } } </style> <div id="js_btn"> <a href="#">MENU</a> </div> <div id="js_nav"> <ul> <li><a href="#">CONCEPT</a></li> <li><a href="#">WORKS</a></li> <li><a href="#">MEMBER</a> <li><a href="#">ABOUT US</a></li> <li><a href="#">RECRUIT</a></li> <li><a href="#">CONTACT</a></li> </ul> </div> <script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js'></script> <script> $(function(){ var $body = $('body'); $('#js_btn').on('click', function () { $body.toggleClass('open'); }); $('#js_nav').on('click', function () { $body.removeClass('open'); }); }); </script>

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下のプロパティを追加することで裏に回ったコンテンツのスクロールを停止させることは出来ます。

css

1.open { 2 overflow-y: hidden; 3}

ただし、メニューを開いた際、コンテンツの位置が一番上に移動してしまいます。
メニューを開いた際、及び閉じた際にコンテンツのスクロール位置も保持・復元したい場合、
以下のようにして、スクロール位置を保持・復元して上げる必要があります。

javascript

1 var $body = $('body'); 2 var originWindowPageYOffset = 0; 3 4 $('#js_btn').on('click', function () { 5 if ($body.hasClass('open')) { 6 $body 7 .removeClass('open') 8 .css({ marginTop: '' }); 9 // メニューを開く前のスクロール位置に戻す 10 window.scrollTo(0, originWindowPageYOffset); 11 } 12 else { 13 // スクロール量取得 14 originWindowPageYOffset = (window.pageYOffset !== undefined) ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop; 15 16 $body 17 .css({ marginTop: originWindowPageYOffset * -1 }) // ネガティブマージンでスクロールしたように見せかける 18 .addClass('open'); 19 } 20 21 return false; 22 }); 23 24 $('#js_nav').on('click', function () { 25 $body 26 .removeClass('open') 27 .css({ marginTop: '' }); 28 // メニューを開く前のスクロール位置に戻す 29 window.scrollTo(0, originWindowPageYOffset); 30 31 return false; 32 });

**「メニューにスクロールが必用なデザイン」**というのが、画面の高さよりモーダル内のコンテンツの高さの方があるためスクロール表示させたいと言うのであれば、#js_navoverflow-y: auto;を追加すれば対応可能です。
https://jsfiddle.net/takmatz/s08r48xf/
※例は上下方向のスクロールのみとしてます。

投稿2017/07/04 15:10

編集2017/07/05 09:19
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

jyoze

2017/07/05 07:07

Tak_Matz様 ありがとうございます。 スクロールは可能になりました。 このスクロールの際に モーダルウインドウの下のコンテンツをcssのposition:fixedなどで固定させる方法はありますでしょうか。 クリック時にbodyタグに「 position: 'fixed'」を加えてみたのですが、上手くいかず、 コンテンツを「<div id="wrapper">」で囲み、モーダルウインドウナビを外に出していろいろ試しています。 また、スクロールをスムーズにさせる方法もしくはプラグインなどはご存知でしょうか。 質問ばかりで申し訳ありません。
jyoze

2017/07/11 08:00

返信が遅くなり申し訳ありません。 ご回答本当にありがとうございます。 現在ご回答いただいた内容で設定してみました。 PCのブラウザではスクロールが止まるのですが、 なぜかスマホ(iPhone7)では裏に回ったコンテンツがスクロールできてしまいます。 私の記述に間違いがないか今調べております。 ひとまずご報告させていただきました。 固定ができましたら、記載させていただきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問