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

js实现modal

2026-04-05 23:52:42JavaScript

实现基础模态框(Modal)

HTML结构

<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 span = document.getElementsByClassName("close")[0];

// 打开模态框
function openModal() {
  modal.style.display = "block";
}

// 关闭模态框
span.onclick = function() {
  modal.style.display = "none";
}

// 点击模态框外部关闭
window.onclick = function(event) {
  if (event.target == modal) {
    modal.style.display = "none";
  }
}

动态创建模态框

JavaScript实现

js实现modal

function createModal(content) {
  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;';

  modalContent.appendChild(closeBtn);
  modalContent.appendChild(document.createTextNode(content));
  modal.appendChild(modalContent);
  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;
}

支持Promise的模态框

JavaScript实现

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 message = document.createElement('p');
    message.textContent = options.message || '';

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

    closeBtn.onclick = function() {
      document.body.removeChild(modal);
      resolve(false);
    }

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

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

动画效果增强

CSS添加动画

js实现modal

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

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

JavaScript调整

function openModal() {
  modal.style.display = "block";
  modal.querySelector('.modal-content').classList.add('animate');
}

响应式设计优化

CSS媒体查询

@media screen and (max-width: 600px) {
  .modal-content {
    width: 95%;
    margin: 10% auto;
  }
}

可复用组件实现

JavaScript类实现

class Modal {
  constructor(options) {
    this.options = options;
    this.modal = null;
    this.init();
  }

  init() {
    this.modal = document.createElement('div');
    this.modal.className = 'modal';

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

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

    const title = document.createElement('h2');
    title.textContent = this.options.title || '';

    const body = document.createElement('div');
    body.innerHTML = this.options.body || '';

    modalContent.appendChild(closeBtn);
    modalContent.appendChild(title);
    modalContent.appendChild(body);
    this.modal.appendChild(modalContent);

    closeBtn.onclick = () => this.close();

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

  open() {
    document.body.appendChild(this.modal);
  }

  close() {
    document.body.removeChild(this.modal);
  }
}

标签: jsmodal
分享给朋友:

相关文章

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

js实现交换

js实现交换

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

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

最新文章
  • js实现call

    2026-04-06 01:51:34

  • js实现拍照

    2026-04-06 01:48:24

  • 通过js实现

    2026-04-06 01:46:53

  • js实现鼠标

    2026-04-06 01:45:09

  • js实现Al

    2026-04-06 01:43:37

标签列表
  • vue (13931)
  • 原理 (626)
  • 分页 (603)
  • 跳转 (582)
  • 页面 (1094)
  • 路由 (650)
  • 列表 (473)
  • 功能 (1256)
  • 文件 (456)
  • 项目 (532)
  • 菜单 (444)
  • 组件 (1026)
  • 表格 (673)
  • 数据 (497)
  • 图片 (790)
  • js (4916)
  • 如何实现 (1693)
  • 效果 (625)
  • react (3311)
  • jquery (2238)
  • css (2728)
  • php (4572)
  • java (3021)
  • uniapp (1363)
  • elementui (828)

陕ICP备2023000799号  网站地图

Powered By Z-BlogPHP. Theme by TOYEAN.