js实现modal弹出
使用纯JavaScript实现Modal弹出框
创建模态框(Modal)是前端开发中常见的需求,以下是一个完整的实现方案:
HTML结构
<button id="openModal">打开Modal</button>
<div id="myModal" class="modal">
<div class="modal-content">
<span class="close">×</span>
<p>这里是模态框内容...</p>
</div>
</div>
CSS样式
.modal {
display: none;
position: fixed;
z-index: 1;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
background-color: rgba(0,0,0,0.4);
}
.modal-content {
background-color: #fefefe;
margin: 15% auto;
padding: 20px;
border: 1px solid #888;
width: 80%;
max-width: 600px;
}
.close {
color: #aaa;
float: right;
font-size: 28px;
font-weight: bold;
cursor: pointer;
}
.close:hover {
color: black;
}
JavaScript实现
// 获取DOM元素
const modal = document.getElementById("myModal");
const btn = document.getElementById("openModal");
const span = document.getElementsByClassName("close")[0];
// 打开模态框
btn.onclick = function() {
modal.style.display = "block";
}
// 关闭模态框
span.onclick = function() {
modal.style.display = "none";
}
// 点击模态框外部关闭
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}
添加动画效果
可以通过CSS transition为模态框添加淡入淡出效果:

.modal-content {
animation: fadeIn 0.3s;
}
@keyframes fadeIn {
from {opacity: 0; transform: translateY(-20px);}
to {opacity: 1; transform: translateY(0);}
}
响应式改进
确保模态框在不同屏幕尺寸下都能正常显示:

@media (max-width: 600px) {
.modal-content {
width: 95%;
margin: 30% auto;
}
}
禁用背景滚动
当模态框打开时,防止页面背景滚动:
btn.onclick = function() {
modal.style.display = "block";
document.body.style.overflow = "hidden";
}
span.onclick = function() {
modal.style.display = "none";
document.body.style.overflow = "auto";
}
键盘支持
添加ESC键关闭模态框的功能:
document.addEventListener('keydown', function(event) {
if (event.key === "Escape" && modal.style.display === "block") {
modal.style.display = "none";
document.body.style.overflow = "auto";
}
});
这个实现包含了模态框的基本功能,可以根据实际需求进一步扩展和定制。






