jquery 底层触发的点击 div
jquery click triggered by underlaying div
我正在制作自己的灯箱。
我有一个固定在整个屏幕上的半透明 div,在它里面我有一个以我的内容为中心的灯箱。 div 中的 div。
我对 jQ 不是很好,所以我不知道如何确保单击事件(关闭带有变暗 div 和灯箱的容器)仅在单击变暗区域时触发,并且如果我单击灯箱中的某些内容,则不会。
本质上:如果单击半透明区域,则关闭弹出窗口和半透明区域,但如果我单击中间的灯箱则不会。
这是我目前得到的:
(灯箱像 一样居中)
$(document).ready( function() {
$("#openpopup").click(function() {
$('#closepopup').toggle();
});
$("#closepopup").click(function() {
$('#closepopup').toggle();
});
});
html, body {height:100%;}
#closepopup {
background:rgba(0,0,0,.5);
position:fixed;
top:0;
left:0;
THIS_CENTERS_CONTENT:;
width:100%;
height:100%;
vertical-align: middle;
text-align:center;
}
.fullheight {
THIS_CENTERS_CONTENT:;
height:100%;
vertical-align: middle;
display: inline-block;
}
#popupbox {
background:#ebebeb;
border-radius:15px;
text-align:left;
height:auto;
THIS_CENTERS_CONTENT:;
max-width:90%;
vertical-align: middle;
display: inline-block;
}
#popupboxinner {
THIS_KEEPS_CONTENT_PLACED:;
max-width:800px; SAME_AS_MAX_IMG_WIDTH:;
padding:20px 30px;
min-width:200px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<div id="closepopup">
<span class="fullheight"></span>
<div id="popupbox">
<div id="popupboxinner">
LIGHTBOX CONTENT - SHOULD NOT CLOSE IF CLICKED
</div>
</div>
</div>
<span id="openpopup">OPEN CLICKABLE SEMI TRANSPARENT WRAPPER WITH LIGHTBOX INSIDE</span>
在示例灯箱上为您做了一个快速标记!基本上,正如 Noah 所说,您只需在透明 div 上放置一个点击事件。
如果您在执行代码时遇到问题,请告诉我!
$('#lightbox-wrapper').click(function() {
$('#lightbox-wrapper, #lightbox').toggleClass('open');
});
function openLightBox() {
$('#lightbox-wrapper, #lightbox').toggleClass('open');
}
/* DEFAULT STATE */
#lightbox-wrapper {
display: none;
}
#lightbox {
display: none;
}
#lightbox-wrapper.open {
display: block;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.7);
}
#lightbox.open {
display: block;
position: fixed;
top: 0;
width: 100%;
margin: 0 auto;
margin-top: 40vh;
}
#lightbox-content {
display: block;
width: 250px;
margin: 0 auto;
background: #f1f1f1;
padding: 5px;
text-align: center;
box-shadow: 0px 0px 5px #f5f5f5;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="lightbox-wrapper"></div>
<div id="lightbox">
<div id="lightbox-content">
<h1>I'm a lightbox</h1>
</div>
</div>
<button onclick="javascript:openLightBox()">Open Lightbox</button>
要阻止点击传播:
$('#lightbox').click(function(e){
e.stopPropagation();
});
只需将 #lightbox
替换为内部 div(透明 div 内的灯箱)的 ID,并将其添加到现有代码中。
// 已编辑 - 在末尾添加了大括号。 - 保罗
$(document).ready( function() {
$("#openpopup").click(function() {
$('#closepopup').toggle();
});
$("#closepopup").click(function() {
$('#closepopup').toggle();
});
$('#popupbox').click(function(e){
e.stopPropagation();
});
});
html, body {height:100%;}
#closepopup {
background:rgba(0,0,0,.5);
position:fixed;
top:0;
left:0;
THIS_CENTERS_CONTENT:;
width:100%;
height:100%;
vertical-align: middle;
text-align:center;
}
.fullheight {
THIS_CENTERS_CONTENT:;
height:100%;
vertical-align: middle;
display: inline-block;
}
#popupbox {
background:#ebebeb;
border-radius:15px;
text-align:left;
height:auto;
THIS_CENTERS_CONTENT:;
max-width:90%;
vertical-align: middle;
display: inline-block;
}
#popupboxinner {
THIS_KEEPS_CONTENT_PLACED:;
max-width:800px; SAME_AS_MAX_IMG_WIDTH:;
padding:20px 30px;
min-width:200px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<div id="closepopup">
<span class="fullheight"></span>
<div id="popupbox">
<div id="popupboxinner">
LIGHTBOX CONTENT
</div>
</div>
</div>
<span id="openpopup">OPEN</span>
我正在制作自己的灯箱。
我有一个固定在整个屏幕上的半透明 div,在它里面我有一个以我的内容为中心的灯箱。 div 中的 div。
我对 jQ 不是很好,所以我不知道如何确保单击事件(关闭带有变暗 div 和灯箱的容器)仅在单击变暗区域时触发,并且如果我单击灯箱中的某些内容,则不会。
本质上:如果单击半透明区域,则关闭弹出窗口和半透明区域,但如果我单击中间的灯箱则不会。
这是我目前得到的: (灯箱像 一样居中)
$(document).ready( function() {
$("#openpopup").click(function() {
$('#closepopup').toggle();
});
$("#closepopup").click(function() {
$('#closepopup').toggle();
});
});
html, body {height:100%;}
#closepopup {
background:rgba(0,0,0,.5);
position:fixed;
top:0;
left:0;
THIS_CENTERS_CONTENT:;
width:100%;
height:100%;
vertical-align: middle;
text-align:center;
}
.fullheight {
THIS_CENTERS_CONTENT:;
height:100%;
vertical-align: middle;
display: inline-block;
}
#popupbox {
background:#ebebeb;
border-radius:15px;
text-align:left;
height:auto;
THIS_CENTERS_CONTENT:;
max-width:90%;
vertical-align: middle;
display: inline-block;
}
#popupboxinner {
THIS_KEEPS_CONTENT_PLACED:;
max-width:800px; SAME_AS_MAX_IMG_WIDTH:;
padding:20px 30px;
min-width:200px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<div id="closepopup">
<span class="fullheight"></span>
<div id="popupbox">
<div id="popupboxinner">
LIGHTBOX CONTENT - SHOULD NOT CLOSE IF CLICKED
</div>
</div>
</div>
<span id="openpopup">OPEN CLICKABLE SEMI TRANSPARENT WRAPPER WITH LIGHTBOX INSIDE</span>
在示例灯箱上为您做了一个快速标记!基本上,正如 Noah 所说,您只需在透明 div 上放置一个点击事件。
如果您在执行代码时遇到问题,请告诉我!
$('#lightbox-wrapper').click(function() {
$('#lightbox-wrapper, #lightbox').toggleClass('open');
});
function openLightBox() {
$('#lightbox-wrapper, #lightbox').toggleClass('open');
}
/* DEFAULT STATE */
#lightbox-wrapper {
display: none;
}
#lightbox {
display: none;
}
#lightbox-wrapper.open {
display: block;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.7);
}
#lightbox.open {
display: block;
position: fixed;
top: 0;
width: 100%;
margin: 0 auto;
margin-top: 40vh;
}
#lightbox-content {
display: block;
width: 250px;
margin: 0 auto;
background: #f1f1f1;
padding: 5px;
text-align: center;
box-shadow: 0px 0px 5px #f5f5f5;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="lightbox-wrapper"></div>
<div id="lightbox">
<div id="lightbox-content">
<h1>I'm a lightbox</h1>
</div>
</div>
<button onclick="javascript:openLightBox()">Open Lightbox</button>
要阻止点击传播:
$('#lightbox').click(function(e){
e.stopPropagation();
});
只需将 #lightbox
替换为内部 div(透明 div 内的灯箱)的 ID,并将其添加到现有代码中。
// 已编辑 - 在末尾添加了大括号。 - 保罗
$(document).ready( function() {
$("#openpopup").click(function() {
$('#closepopup').toggle();
});
$("#closepopup").click(function() {
$('#closepopup').toggle();
});
$('#popupbox').click(function(e){
e.stopPropagation();
});
});
html, body {height:100%;}
#closepopup {
background:rgba(0,0,0,.5);
position:fixed;
top:0;
left:0;
THIS_CENTERS_CONTENT:;
width:100%;
height:100%;
vertical-align: middle;
text-align:center;
}
.fullheight {
THIS_CENTERS_CONTENT:;
height:100%;
vertical-align: middle;
display: inline-block;
}
#popupbox {
background:#ebebeb;
border-radius:15px;
text-align:left;
height:auto;
THIS_CENTERS_CONTENT:;
max-width:90%;
vertical-align: middle;
display: inline-block;
}
#popupboxinner {
THIS_KEEPS_CONTENT_PLACED:;
max-width:800px; SAME_AS_MAX_IMG_WIDTH:;
padding:20px 30px;
min-width:200px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<div id="closepopup">
<span class="fullheight"></span>
<div id="popupbox">
<div id="popupboxinner">
LIGHTBOX CONTENT
</div>
</div>
</div>
<span id="openpopup">OPEN</span>