前端开发社区前端开发社区
  • 首页
  • VUE.js
  • React.js
  • HTML
  • CSS
  • JavaScript
  • PHP
  • jquery
  • Java
  • MySQL
  • uniapp
前端开发社区
当前位置:首页 > JavaScript

js实现modal

2026-03-14 05:51:18JavaScript

使用纯JavaScript实现Modal

创建HTML结构

<div class="modal" id="myModal">
  <div class="modal-content">
    <span class="close">&times;</span>
    <p>这里是模态框内容</p>
  </div>
</div>
<button id="openModal">打开模态框</button>

添加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实现功能

// 获取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";
  }
}

动态创建Modal组件

封装成可重用函数

function createModal(content) {
  // 创建modal元素
  const modal = document.createElement('div');
  modal.className = 'modal';

  // 创建modal内容
  const modalContent = document.createElement('div');
  modalContent.className = 'modal-content';

  // 创建关闭按钮
  const closeBtn = document.createElement('span');
  closeBtn.className = 'close';
  closeBtn.innerHTML = '&times;';

  // 添加内容
  modalContent.appendChild(closeBtn);
  modalContent.appendChild(document.createTextNode(content));
  modal.appendChild(modalContent);

  // 添加到body
  document.body.appendChild(modal);

  // 事件监听
  closeBtn.onclick = function() {
    document.body.removeChild(modal);
  };

  window.onclick = function(event) {
    if (event.target === modal) {
      document.body.removeChild(modal);
    }
  };

  return modal;
}

// 使用示例
document.getElementById('openModal').addEventListener('click', function() {
  createModal('这是一个动态创建的模态框');
});

支持Promise的Modal实现

实现异步操作

function showModal(options) {
  return new Promise((resolve) => {
    const modal = document.createElement('div');
    modal.className = 'modal';

    const modalContent = document.createElement('div');
    modalContent.className = 'modal-content';

    const closeBtn = document.createElement('span');
    closeBtn.className = 'close';
    closeBtn.innerHTML = '&times;';

    const content = document.createElement('p');
    content.textContent = options.content || '';

    modalContent.appendChild(closeBtn);
    modalContent.appendChild(content);
    modal.appendChild(modalContent);
    document.body.appendChild(modal);

    // 关闭处理函数
    function close() {
      document.body.removeChild(modal);
      resolve(options.returnValue || true);
    }

    closeBtn.onclick = close;

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

    // 如果有按钮选项
    if (options.buttons) {
      const btnContainer = document.createElement('div');
      btnContainer.className = 'modal-buttons';

      options.buttons.forEach(btn => {
        const button = document.createElement('button');
        button.textContent = btn.text;
        button.onclick = function() {
          document.body.removeChild(modal);
          resolve(btn.value);
        };
        btnContainer.appendChild(button);
      });

      modalContent.appendChild(btnContainer);
    }
  });
}

// 使用示例
document.getElementById('openModal').addEventListener('click', async function() {
  const result = await showModal({
    content: '请确认您的操作',
    buttons: [
      { text: '确定', value: true },
      { text: '取消', value: false }
    ]
  });
  console.log('用户选择:', result);
});

动画效果增强

添加CSS动画

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

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

JavaScript控制动画

js实现modal

function animateModal(modal, show) {
  if (show) {
    modal.style.display = 'block';
    setTimeout(() => {
      modal.querySelector('.modal-content').style.opacity = '1';
      modal.querySelector('.modal-content').style.transform = 'translateY(0)';
    }, 10);
  } else {
    modal.querySelector('.modal-content').style.opacity = '0';
    modal.querySelector('.modal-content').style.transform = 'translateY(-50px)';
    setTimeout(() => {
      modal.style.display = 'none';
    }, 400);
  }
}

标签: jsmodal
分享给朋友:

相关文章

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

vue 实现modal

vue 实现modal

Vue 实现 Modal 弹窗的方法 使用组件化方式创建 Modal 创建一个独立的 Modal 组件(如 Modal.vue),包含模板、样式和逻辑。通过 props 控制显示状态,通过 emits…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

最新文章
  • 通过js实现

    2026-03-14 07:42:15

  • js实现鼠标

    2026-03-14 07:40:58

  • js实现Al

    2026-03-14 07:39:20

  • js日历实现

    2026-03-14 07:35:52

  • js循环实现

    2026-03-14 07:32:36

标签列表
  • vue (13920)
  • 原理 (619)
  • 拖拽 (425)
  • 分页 (587)
  • 跳转 (573)
  • 页面 (1076)
  • 路由 (649)
  • 列表 (461)
  • 功能 (1236)
  • 项目 (502)
  • 菜单 (435)
  • 组件 (1021)
  • 表格 (662)
  • 数据 (485)
  • 图片 (767)
  • js (3409)
  • 如何实现 (1639)
  • 效果 (610)
  • react (3311)
  • jquery (1398)
  • css (2718)
  • php (4571)
  • java (1889)
  • uniapp (1363)
  • elementui (828)

陕ICP备2023000799号  网站地图

Powered By Z-BlogPHP. Theme by TOYEAN.