单击子分区外部时关闭灯箱
Close lightbox on click outside of the child div
我在不使用jquery插件的情况下创建了一个灯箱,现在我试图通过单击close
按钮或单击白色区域(.white_content
)之外的任何其他位置来关闭它
Jsfidle示例
<button onclick="document.getElementById('lightbox').style.display='inline';">
Show lightbox
</button>
<!-- LIGHTBOX CODE BEGIN -->
<div id="lightbox" class="lightbox" style="display:none">
<div class="white_content">
<a href="javascript:void(0)" onclick="document.getElementById('lightbox').style.display='none';" class="textright">Close</a>
<p>Click anywhere to close the lightbox.</p>
<p>Use Javascript to insert anything here.</p>
</div>
</div>
<!-- LIGHTBOX CODE END -->
虽然这并不是我想要的。我希望只有当我点击灯箱的黑暗区域而不是白色容器(.white_content
)时才关闭它,但我听说event.propation可能是一个不好用的东西,所以下面是我如何关闭灯箱
$(document).on('click', function(event) {
if (!$(event.target).closest('button').length) {
$(".lightbox").hide();
}
});
您可以像下面的一样更改您的条件
$(document).on('click', function(event) {
if ($(event.target).has('.white_content').length) {
$(".lightbox").hide();
}
});
大多数lightbox脚本都使用两个div-s,内容和覆盖。覆盖层是为了防止用户点击页面的内容,也可以使用点击覆盖层来关闭灯箱。
HTML:
<div id="lightbox"> LIGHTBOX CONTENT </div>
<div id="overlay"></div>
JS:
$( '#overlay, #close').on('click', function(event) {
$("#lightbox, #overlay").hide();
});
$( '#show').on('click', function(event) {
$("#lightbox, #overlay").show();
});
示例
您希望在任何不针对灯箱或其子对象的单击时关闭灯箱。您现有的代码非常接近:
$(document).on('click', function(event) {
if (!$(event.target).closest('button').length &&
!$(event.target).closest('.white_content').length) {
$(".lightbox").hide();
}
});
$(document).on('click', function(event) {
if (!$(event.target).closest('button').length &&
!$(event.target).closest('.white_content').length) {
$(".lightbox").hide();
}
});
.textright {
float: right;
}
.lightbox {
position:fixed;
top:0;
left:0;
width:100%;
height:100%;
background:rgba(0, 0, 0, .8);
}
.white_content {
position: absolute;
top: 25%;
left: 25%;
width: 50%;
height: 50%;
padding: 16px;
border: 5px solid gray;
background-color: white;
z-index:1002;
overflow: auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button onclick="document.getElementById('lightbox').style.display='inline';">
Show lightbox
</button>
<!-- LIGHTBOX CODE BEGIN -->
<div id="lightbox" class="lightbox" style="display:none">
<div class="white_content">
<a href="javascript:void(0)" onclick="document.getElementById('lightbox').style.display='none';" class="textright">Close</a>
<p>Click anywhere to close the lightbox.</p>
<p>Use Javascript to insert anything here.</p>
</div>
</div>
<!-- LIGHTBOX CODE END -->
我还建议使用一个类来表示灯箱是否可见,而不是直接更改显示属性;这样检查时会更清楚。比较$el.is('.active')
和$(el).css('display') == 'inline'
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 调整窗口大小时,可拖动的对象会出现在容器外部
- HTML表单提交时未执行外部函数
- 设置滑块分区上的滚动
- 通过在Dojo mobile ViewController.openExternalView中动态更改打开同一外部视图的
- 使用html中的外部javascript进行数据验证
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 将变量传递给外部Javascript
- 使用javascript在Flash中加载外部图像
- Firebase2(Firebase.google.com)推送通知-从外部管理
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何从外部页面激活非默认引导选项卡
- 如何在运行时在angular 2中加载外部js脚本
- JavaScript-在手机上不工作的情况下,在外部单击时隐藏元素
- 单击子分区外部时关闭灯箱
- 单击分区外部
- 正在加载特定分区中的外部页面内容
- 更改外部分区中的文本时删除了范围
- Sunburst D3分区和外部.csv
- 导航到外部html页面的一个分区