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

js 实现 模态窗口

2026-04-07 10:42:00JavaScript

模态窗口的基本实现

使用HTML和CSS创建模态窗口的结构和样式。模态窗口通常包含一个遮罩层和一个内容区域。

<div class="modal" id="myModal">
  <div class="modal-content">
    <span class="close">&times;</span>
    <p>这里是模态窗口内容</p>
  </div>
</div>
.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("myBtn");
// 获取关闭按钮
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";
  }
}

使用classList优化显示控制

使用classList方法替代直接操作style属性,可以更好地管理样式。

js 实现 模态窗口

// 显示模态窗口
function openModal() {
  modal.classList.add('show');
  modal.classList.remove('hide');
}

// 隐藏模态窗口
function closeModal() {
  modal.classList.add('hide');
  modal.classList.remove('show');
}

对应的CSS需要添加以下样式:

.modal.show {
  display: block;
}

.modal.hide {
  display: none;
}

添加动画效果

为模态窗口添加淡入淡出动画效果,提升用户体验。

js 实现 模态窗口

.modal-content {
  animation-name: animatetop;
  animation-duration: 0.4s;
}

@keyframes animatetop {
  from {top: -300px; opacity: 0}
  to {top: 0; opacity: 1}
}

使用Promise实现异步模态窗口

创建一个返回Promise的模态窗口函数,可以在窗口关闭后执行特定操作。

function showModal() {
  return new Promise((resolve) => {
    const modal = document.getElementById("myModal");
    modal.style.display = "block";

    const closeHandler = () => {
      modal.style.display = "none";
      document.removeEventListener('keydown', escapeHandler);
      resolve();
    };

    const escapeHandler = (e) => {
      if (e.key === 'Escape') closeHandler();
    };

    document.querySelector('.close').onclick = closeHandler;
    document.addEventListener('keydown', escapeHandler);
    window.onclick = function(event) {
      if (event.target == modal) closeHandler();
    };
  });
}

// 使用示例
showModal().then(() => {
  console.log('模态窗口已关闭');
});

使用ES6类封装模态窗口

创建一个可重用的Modal类,便于在项目中多次使用。

class Modal {
  constructor(modalId) {
    this.modal = document.getElementById(modalId);
    this.init();
  }

  init() {
    this.modal.querySelector('.close').onclick = () => this.close();
    window.onclick = (event) => {
      if (event.target === this.modal) this.close();
    };
    document.addEventListener('keydown', (e) => {
      if (e.key === 'Escape') this.close();
    });
  }

  open() {
    this.modal.style.display = 'block';
  }

  close() {
    this.modal.style.display = 'none';
  }
}

// 使用示例
const myModal = new Modal('myModal');
document.getElementById('myBtn').onclick = () => myModal.open();

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

相关文章

vue实现全局模态框

vue实现全局模态框

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

vue模态框组件实现

vue模态框组件实现

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

react模态框如何加水印

react模态框如何加水印

添加水印的基本方法 在React模态框中添加水印可以通过CSS背景或Canvas绘制实现。CSS方法简单高效,适合静态水印;Canvas则支持动态内容和复杂效果。 // CSS背景水印示例 .mod…

react实现模态框

react实现模态框

使用 React 创建模态框 在 React 中实现模态框可以通过多种方式完成,以下是几种常见的方法。 使用 React 状态管理 通过 React 的 useState 钩子管理模态框的显示和隐藏…

js实现聊天窗口

js实现聊天窗口

实现聊天窗口的基本结构 使用HTML和CSS构建聊天窗口的界面框架。HTML部分需要包含消息显示区域和输入框,CSS用于美化界面。 <div class="chat-container">…

js实现窗口堵塞

js实现窗口堵塞

实现窗口堵塞的方法 使用JavaScript实现窗口堵塞通常指阻止用户关闭或导航离开当前页面。以下是几种常见场景的实现方式: 阻止浏览器窗口关闭 通过监听beforeunload事件,可以显示确认对…