打开模态窗口
当前位置:首页 > JavaScript

js 实现 模态窗口

2026-02-02 17:00:55JavaScript

使用原生JavaScript实现模态窗口

创建HTML结构,包含触发按钮和模态框内容

<button id="modalBtn">打开模态窗口</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%;
  background-color: rgba(0,0,0,0.4);
}

.modal-content {
  background-color: #fefefe;
  margin: 15% auto;
  padding: 20px;
  border: 1px solid #888;
  width: 80%;
}

.close {
  color: #aaa;
  float: right;
  font-size: 28px;
  font-weight: bold;
  cursor: pointer;
}

实现JavaScript逻辑

const modal = document.getElementById("myModal");
const btn = document.getElementById("modalBtn");
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";
  }
}

使用jQuery简化实现

HTML结构同上,引入jQuery库后

$(document).ready(function(){
  $("#modalBtn").click(function(){
    $("#myModal").fadeIn();
  });

  $(".close, .modal").click(function(){
    $("#myModal").fadeOut();
  });

  $(".modal-content").click(function(e){
    e.stopPropagation();
  });
});

动态内容模态窗口实现

创建可复用的模态窗口函数

function showModal(title, content) {
  const modalHTML = `
    <div id="dynamicModal" class="modal">
      <div class="modal-content">
        <span class="close">&times;</span>
        <h3>${title}</h3>
        <div>${content}</div>
      </div>
    </div>
  `;

  document.body.insertAdjacentHTML('beforeend', modalHTML);

  const modal = document.getElementById("dynamicModal");
  const span = document.querySelector("#dynamicModal .close");

  span.onclick = function() {
    modal.remove();
  }

  window.onclick = function(event) {
    if (event.target == modal) {
      modal.remove();
    }
  }

  modal.style.display = "block";
}

// 调用示例
showModal("提示", "这是一条重要消息");

添加动画效果

在CSS中添加过渡动画

.modal-content {
  animation: modalopen 0.5s;
}

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

可访问性改进

添加ARIA属性增强可访问性

<div id="myModal" class="modal" role="dialog" aria-labelledby="modalTitle" aria-hidden="true">
  <div class="modal-content">
    <h3 id="modalTitle">模态窗口标题</h3>
    <span class="close" aria-label="关闭">&times;</span>
    <p>这里是模态窗口内容</p>
  </div>
</div>

对应JavaScript更新

btn.onclick = function() {
  modal.style.display = "block";
  modal.setAttribute('aria-hidden', 'false');
}

span.onclick = function() {
  modal.style.display = "none";
  modal.setAttribute('aria-hidden', 'true');
}

js 实现 模态窗口

标签: 窗口模态
分享给朋友:

相关文章

react如何检测窗口

react如何检测窗口

监听窗口大小变化 使用useEffect钩子和resize事件监听窗口尺寸变化。在组件挂载时添加事件监听器,卸载时移除监听器以避免内存泄漏。 import { useState, useEffec…

vue 实现模态框

vue 实现模态框

使用 Vue 实现模态框 在 Vue 中实现模态框可以通过组件化方式完成,以下是一个完整的实现方案,包含基础功能、动画和自定义内容支持。 基础模态框组件实现 创建 Modal.vue 组件文件:…

vue实现模态框

vue实现模态框

Vue 实现模态框的方法 使用组件化方式创建模态框 创建一个独立的 Vue 组件作为模态框,通过 props 控制显示状态和内容。 <template> <div class…

vue实现新增弹窗窗口

vue实现新增弹窗窗口

Vue 实现新增弹窗窗口 在 Vue 中实现新增弹窗窗口通常需要结合组件化和状态管理。以下是几种常见的实现方式: 使用 v-if 或 v-show 控制弹窗显示 通过数据绑定控制弹窗的显示与隐藏,…

vue实现全局模态框

vue实现全局模态框

vue实现全局模态框的方法 使用Vue.extend创建模态框组件 通过Vue.extend创建独立的模态框构造器,挂载到DOM中实现全局调用。这种方式适合需要频繁调用的模态框场景。 // Moda…

vue模态框组件实现

vue模态框组件实现

Vue 模态框组件实现 方法一:基础模态框组件 创建 Modal.vue 文件,定义模态框模板和逻辑: <template> <div class="modal" v-if=…