-
ID:4MkvZL さんの質問

jQueryに詳しい方、教えてください。
以下のように、”コンテンツをオーバーレイ表示させる”というのを制作中のページに組み込みました。
この記述では、「close」ボタンでしか、オーバーレイ表示を閉じることが出来ないのですが、オーバーレイ表示中に、画面上のどこかをクリックしたら閉じるようにしたいです。どのように記述すればよいのでしょうか?
イメージは、ライトボックスのような感じです。

<div id="overlay">
<p id="text">オーバーレイ表示</p>
<p id="close">close</p>
</div>
<div id="btn">click</div>

<script type="text/javascript">
$(function() {
$("#btn").click(function() {
$("#overlay").fadeIn();
});
$("#close").click(function() {
$("#overlay").fadeOut();
});
});
</script>

どうぞよろしくお願いします。

みんなの回答 6 件

ID:Bvzsh0 さんの回答

単純にどこかクリックしたらフェードアウトさせたいなら
$("#close").click

$(’body’).click
にしたらどうですか?

ID:4MkvZL

回答ありがとうございます。
やってみましたが、オーバーレイが一瞬表示され、すぐにフェードアウトするという状態になりました。。

ID:N9xu.3

$(’body’).clickにするのプラス、追加で、

$("#btn").click(function(e) {
e.stopPropagation();
$("#overlay").fadeIn();
});

でどうですか?
#全然動作確認してないのでNGかもですが。

ID:4MkvZL

ありがとうございます!できました!が、、オーバーレイさせている部分をクリックしても閉じますね。質問に「画面上のどこか」と書いてしまったのですが、「オーバーレイ表示部分以外の、画面上のどこか」をクリックしたら閉じる設定にしたいです。。
「オーバーレイ表示部分以外の、画面上のどこか」と「close」ボタンの両方で閉じれるのが理想です。
ややこしくてすいません。ご回答にはほんとに感謝いたします。

ID:wyoSRK さんの回答

$.not()使えばいけるんちゃう?(適当)

ID:0lneAY さんの回答

オーバーレイの下に画面全体を覆うレイヤーを生成して、それにクリックイベントを設定してみては?

アプリ開発する時はそんな感じでやってるけど、Webの場合はようわからん。

ID:0lneAY

とりあえず、これは機能するはずやで!!はずやでー!!おやすみなさーい。

ID:4MkvZL

なるほどです。アプリではそうなんですね。勉強なります。
ただ、プログラム、ほんとに分からなくて。。後々、勉強して挑戦してみます。

ID:0lneAY

勉強しないでもささっと試せるでしょ?単にオーバーレイの下に透明なり半透明の画面全体を覆うレイヤーを一枚追加して、そこにイベント設定するだけだよ?

ID:JvEHta さんの回答

これかな

$("#overlay").click = $("#close").click;

ID:u8eQhM さんの回答

$(’#overlay’).click~でいいでしょ。#closeクリックしたら上位オブジェクトにイベント伝達されるし結果は同じ。厳密にやりたいならpreventDefaultとかググれ。

ID:4MkvZL

ありがとうございます。でもこのやり方も、オーバーレイ表示部分もクリックイベントになってしまいました。上の方のお返事にも書いたように「オーバーレイ表示部分以外の、画面上のどこか」をクリックしたら閉じる設定にしたかったもので。。すいません。ありがとうございました。

ID:u8eQhM

それなら
$(’#overlay’).on(’click’,function(e){
e.preventDefault();
});
こうやな。#overlayをクリックしても上位オブジェクトにクリックの伝達をしないってことだ。

ID:4MkvZL

何度もありがとうございます。だめでしたが、多分私の説明不足のせいかと。。
CSSが、以下のような指定で、#overlayでおおわれています。
#overlay{
display: none;
width: 100%;
height:100%;
position: fixed;
top: 0;
z-index: 100;
background: rgba(0,0,0,0.7);
}

<p id="text">オーバーレイ表示</p>という部分以外のところをクリックしたら、閉じる設定が理想です。

ID:0lneAY さんの回答

早く俺の答えた回答試さんかーい!

ID:4MkvZL

すいません。回答ありがとうございます。説明不足ですいません。
今回は、
#overlay{
display: none;
width: 100%;
height:100%;
position: fixed;
top: 0;
z-index: 100;
background: rgba(0,0,0,0.7);
}
となっており、#overlay自体ですでに画面がおおわれています。。

最終更新日:2013-12-28 (7,639 views)

関連するトピックス

ページ上部に戻る