js原生实现一个弹窗
使用HTML和CSS创建弹窗结构
在HTML中定义一个弹窗容器,默认隐藏。CSS用于设置弹窗样式和遮罩层效果:
<div id="modal" class="modal">
<div class="modal-content">
<span class="close">×</span>
<p>这里是弹窗内容</p>
</div>
</div>
<style>
.modal {
display: none;
position: fixed;
z-index: 1;
left: 0;
top: 0;
width: 100%;
height: 100%;
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: 500px;
}
.close {
color: #aaa;
float: right;
font-size: 28px;
font-weight: bold;
cursor: pointer;
}
</style>
实现基础弹窗控制逻辑
通过JavaScript获取DOM元素并添加事件监听:
const modal = document.getElementById("modal");
const closeBtn = document.querySelector(".close");
// 显示弹窗函数
function openModal() {
modal.style.display = "block";
}
// 关闭弹窗函数
function closeModal() {
modal.style.display = "none";
}
// 点击关闭按钮
closeBtn.addEventListener("click", closeModal);
// 点击遮罩层关闭
window.addEventListener("click", (event) => {
if (event.target === modal) {
closeModal();
}
});
添加动画效果增强用户体验
在CSS中添加过渡动画效果:
.modal-content {
animation: modalopen 0.3s;
}
@keyframes modalopen {
from {opacity: 0; transform: translateY(-50px);}
to {opacity: 1; transform: translateY(0);}
}
实现可配置的弹窗内容
创建动态设置内容的函数:
function showModal(title, content) {
const modalContent = document.querySelector(".modal-content");
modalContent.innerHTML = `
<span class="close">×</span>
<h2>${title}</h2>
<p>${content}</p>
`;
openModal();
// 重新绑定关闭事件
document.querySelector(".close").addEventListener("click", closeModal);
}
完整示例代码
整合所有功能的完整实现:
<!DOCTYPE html>
<html>
<head>
<style>
.modal {
display: none;
position: fixed;
z-index: 1;
left: 0;
top: 0;
width: 100%;
height: 100%;
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: 500px;
animation: modalopen 0.3s;
}
.close {
color: #aaa;
float: right;
font-size: 28px;
font-weight: bold;
cursor: pointer;
}
@keyframes modalopen {
from {opacity: 0; transform: translateY(-50px);}
to {opacity: 1; transform: translateY(0);}
}
</style>
</head>
<body>
<button id="openBtn">打开弹窗</button>
<div id="modal" class="modal">
<div class="modal-content">
<span class="close">×</span>
<h2>默认标题</h2>
<p>默认内容</p>
</div>
</div>
<script>
const modal = document.getElementById("modal");
const closeBtn = document.querySelector(".close");
const openBtn = document.getElementById("openBtn");
function openModal() {
modal.style.display = "block";
}
function closeModal() {
modal.style.display = "none";
}
closeBtn.addEventListener("click", closeModal);
window.addEventListener("click", (event) => {
if (event.target === modal) {
closeModal();
}
});
openBtn.addEventListener("click", () => {
showModal("自定义标题", "这是动态设置的弹窗内容");
});
function showModal(title, content) {
const modalContent = document.querySelector(".modal-content");
modalContent.innerHTML = `
<span class="close">×</span>
<h2>${title}</h2>
<p>${content}</p>
`;
openModal();
document.querySelector(".close").addEventListener("click", closeModal);
}
</script>
</body>
</html>






