<…">
当前位置:首页 > JavaScript

js原生实现一个弹窗

2026-03-02 00:58:37JavaScript

使用HTML和CSS创建弹窗结构

在HTML中定义一个弹窗容器,默认隐藏。CSS用于设置弹窗样式和遮罩层效果:

<div id="modal" class="modal">
  <div class="modal-content">
    <span class="close">&times;</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">&times;</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">&times;</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">&times;</span>
    <h2>${title}</h2>
    <p>${content}</p>
  `;
  openModal();

  document.querySelector(".close").addEventListener("click", closeModal);
}
</script>

</body>
</html>

js原生实现一个弹窗

标签: js
分享给朋友:

相关文章

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…