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

js实现modal弹出

2026-04-07 12:51:41JavaScript

使用纯JavaScript实现Modal弹出框

创建模态框(Modal)是前端开发中常见的需求,以下是一个完整的实现方案:

HTML结构

<button id="openModal">打开Modal</button>

<div id="myModal" class="modal">
  <div class="modal-content">
    <span class="close">&times;</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为模态框添加淡入淡出效果:

js实现modal弹出

.modal-content {
  animation: fadeIn 0.3s;
}

@keyframes fadeIn {
  from {opacity: 0; transform: translateY(-20px);}
  to {opacity: 1; transform: translateY(0);}
}

响应式改进

确保模态框在不同屏幕尺寸下都能正常显示:

js实现modal弹出

@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";
  }
});

这个实现包含了模态框的基本功能,可以根据实际需求进一步扩展和定制。

标签: 弹出js
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现导航菜单

js实现导航菜单

使用HTML和CSS创建基础结构 导航菜单的基础结构通常由HTML的无序列表(<ul>)和列表项(<li>)组成,每个列表项包含一个链接(<a>)。CSS用于样式化…

js验证码实现

js验证码实现

验证码的基本原理 验证码(CAPTCHA)用于区分人类用户和自动化程序。常见类型包括图形验证码、滑动验证码、短信验证码等。JavaScript 可用于前端验证码的生成和验证逻辑。 图形验证码实现 使…

vue实现弹出模块

vue实现弹出模块

Vue 实现弹出模块的方法 使用 v-if 或 v-show 控制显示隐藏 通过 Vue 的指令 v-if 或 v-show 可以控制弹出模块的显示和隐藏。v-if 是条件渲染,v-show 是样式切…

vue.js实现checkbox

vue.js实现checkbox

使用 v-model 绑定复选框 在 Vue.js 中,可以通过 v-model 指令实现复选框的双向数据绑定。复选框的值会与 Vue 实例中的数据属性同步。 <template>…