📅  最后修改于: 2023-12-03 14:50:54.026000             🧑  作者: Mango
在 web 应用程序开发中,弹出窗口常常被用来展示提示信息、表单、菜单等内容。在某些情况下,我们需要在单击弹出窗口外部时将其关闭,为用户提供更好的体验。本文将介绍如何通过 JavaScript 实现在 div 外部单击时关闭弹出窗口。
在本示例中,我们将创建一个简单的 HTML 结构。一个按钮将用来触发弹出窗口,另一个按钮将用来关闭弹出窗口。弹出窗口将被放置在一个名为 overlay
的 div 中。
<button id="open-btn">打开弹出框</button>
<div id="overlay" style="display: none;">
<button id="close-btn">关闭弹出框</button>
</div>
为了让弹出窗口覆盖整个页面,并在外部单击时关闭,我们需要添加一个遮罩层。弹出窗口和遮罩层都需要进行样式设置。
#overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
}
#overlay button {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
padding: 10px;
font-size: 16px;
}
为了使弹出窗口在单击外部关闭,我们需要监听整个页面的单击事件。如果单击的是 overlay
外部的元素,则关闭弹出窗口。
// 获取页面元素
var openBtn = document.getElementById('open-btn');
var closeBtn = document.getElementById('close-btn');
var overlay = document.getElementById('overlay');
// 打开弹出窗口
openBtn.addEventListener('click', function() {
overlay.style.display = 'block';
});
// 关闭弹出窗口
closeBtn.addEventListener('click', function() {
overlay.style.display = 'none';
});
// 点击遮罩层关闭弹出窗口
overlay.addEventListener('click', function(e) {
if (e.target === overlay) {
overlay.style.display = 'none';
}
});
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>关闭 div 弹出窗口</title>
<style>
#overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
}
#overlay button {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
padding: 10px;
font-size: 16px;
}
</style>
</head>
<body>
<button id="open-btn">打开弹出框</button>
<div id="overlay" style="display: none;">
<button id="close-btn">关闭弹出框</button>
</div>
<script>
// 获取页面元素
var openBtn = document.getElementById('open-btn');
var closeBtn = document.getElementById('close-btn');
var overlay = document.getElementById('overlay');
// 打开弹出窗口
openBtn.addEventListener('click', function() {
overlay.style.display = 'block';
});
// 关闭弹出窗口
closeBtn.addEventListener('click', function() {
overlay.style.display = 'none';
});
// 点击遮罩层关闭弹出窗口
overlay.addEventListener('click', function(e) {
if (e.target === overlay) {
overlay.style.display = 'none';
}
});
</script>
</body>
</html>
以上就是关闭 div 弹出窗口的完整实现代码。