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

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

新規登録して質問してみよう
ただいま回答率
86.02%
ポップアップ

一般的に、ポップアップは、ウィンドウやアプリケーションに上に浮かぶUIエレメントを指します。

モーダルダイアログ

モーダルダイアログとは、ユーザーに重要な情報を表示するときに用いられる視覚的なダイアログのことを指します。これらのダイアログは他のすべてのコンテンツの上に表示され、ユーザーの入力を受けるまでアプリケーションフローは停止されます。

JavaScript

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

Q&A

解決済

作成したモーダルと背景をその場で固定したい(JavaScript)

eggplant_bc
eggplant_bc

総合スコア20

ポップアップ

一般的に、ポップアップは、ウィンドウやアプリケーションに上に浮かぶUIエレメントを指します。

モーダルダイアログ

モーダルダイアログとは、ユーザーに重要な情報を表示するときに用いられる視覚的なダイアログのことを指します。これらのダイアログは他のすべてのコンテンツの上に表示され、ユーザーの入力を受けるまでアプリケーションフローは停止されます。

JavaScript

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

2回答

0グッド

0クリップ

10291閲覧

投稿2018/03/14 05:20

JavaScript初心者で、勉強のためにモーダルを作成しています。
モーダル自体はちゃんと動いていて、モーダルを表示した時の背景が暗くなるような表示も出来ています。
ただ現在、モーダルそのものも、背景も、どちらもスクロール出来てしまう状態です。
モーダルへ繋がるボタンをクリックしたその場でモーダルと背景を固定したいのですが、どのようなJSを書けば出来ますでしょうか?
暗い背景のdivとモーダルのdivは、現在body直下にあります。
まだjQueryを勉強していないので、出来ればJavaScriptの書き方で教えていただけるとありがたいです。

<div id="full"></div> <div id="modalInfo" style="display: none;">      モーダルの内容をここに書いています。 </div>

fullのidがついたdivが背景用で、モーダルが表示されてる間はover_rayというclassがつく処理を書いています。
ふたつともbodyの直下にあります。

よろしくお願いいたします。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

kei344

2018/03/16 01:16

まだ質問が「受付中」になっていますが、「ベストアンサー」を選び「解決済」にされてはいかがでしょうか。
eggplant_bc

2018/03/16 02:06

失礼しました!忘れてました。ご指摘ありがとうございます。

回答2

1

似たような実装になっているBootstrapを参考にすればいいかと思います。
ダイアログを開いたときにbodyが「overflow: hidden;」になっています。
なお、ネイティブやjQuery UIのDialogにはそのような挙動はないようです。
https://getbootstrap.com/docs/4.0/components/modal/#live-demo

投稿2018/03/14 05:54

x_x

総合スコア13729

eggplant_bc👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

eggplant_bc

2018/03/15 21:40

x_xさん、ご回答いただきありがとうございました! JSの動きを読めなくて、教えていただいてやっとbodyにoverflow: hidden;が付いていることに気がつきました…。 時間かかりましたが、モーダルを中央に固定することができました。 ありがとうございました!

1

ベストアンサー

スクロールというのが、どこがどういう風にスクロールしてしまうかにもよるので、
答えようがないのですが・・・、
ページのスクロールができてしまい、モーダルがずれてしまう、という解釈でお話しします。
position: fixedで固定にすればいいと思います。
(前提ばかりですみませんが、モーダル背景の大きさは、縦横100%の大きさにしている前提です。)

javascript

1var back = document.getElementById("full"), 2 modal = document.getElementById("modalInfo"); 3back.style.position = "fixed"; 4back.modal.position = "fixed"; 5 6// jQuery使ってるなら下記 7$("#full").css("position", "fixed"); 8$("#modalInfo").css("position", "fixed");

戻す時は、

javascript

1back.style.position = ""; 2back.modal.position = ""; 3 4// jQuery使ってるなら下記 5$("#full").css("position", ""); 6$("#modalInfo").css("position", "");

です。
もし、これで質問者さんの意図にそぐわなかったら、
現在適用させている、JavaScriptも記載をしてください。

投稿2018/03/14 05:40

miyabi_takatsuk

総合スコア9416

eggplant_bc👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

eggplant_bc

2018/03/15 21:36

miyabi_takatsukさん、ご回答いただきありがとうございました! 分かりやすくコードも書いていただき、ありがとうございます。 おっしゃる通り、まさにページがスクロールできてしまいモーダルもずれてしまう状態でした。 おかげで解決しました。 本当にありがとうございました!

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

ポップアップ

一般的に、ポップアップは、ウィンドウやアプリケーションに上に浮かぶUIエレメントを指します。

モーダルダイアログ

モーダルダイアログとは、ユーザーに重要な情報を表示するときに用いられる視覚的なダイアログのことを指します。これらのダイアログは他のすべてのコンテンツの上に表示され、ユーザーの入力を受けるまでアプリケーションフローは停止されます。

JavaScript

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