当前位置:首页 > JavaScript

js实现modal弹出

2026-03-15 19:27:22JavaScript

使用原生JavaScript实现Modal弹出框

通过display属性控制Modal的显示与隐藏
创建HTML结构,包含Modal容器、内容区和关闭按钮

<div id="myModal" class="modal">
  <div class="modal-content">
    <span class="close">&times;</span>
    <p>这里是Modal内容</p>
  </div>
</div>

添加CSS样式定义Modal外观

.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控制逻辑

js实现modal弹出

const modal = document.getElementById("myModal");
const span = document.getElementsByClassName("close")[0];

// 点击关闭按钮时隐藏Modal
span.onclick = function() {
  modal.style.display = "none";
}

// 点击Modal外部区域时隐藏
window.onclick = function(event) {
  if (event.target == modal) {
    modal.style.display = "none";
  }
}

// 显示Modal的函数
function openModal() {
  modal.style.display = "block";
}

使用Bootstrap实现Modal

引入Bootstrap库后直接使用预设组件

<!-- 触发按钮 -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
  打开Modal
</button>

<!-- Modal结构 -->
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title">标题</h5>
        <button type="button" class="close" data-dismiss="modal">
          <span>&times;</span>
        </button>
      </div>
      <div class="modal-body">
        <p>Modal内容</p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
      </div>
    </div>
  </div>
</div>

使用第三方库实现高级Modal

通过SweetAlert2库创建美观的Modal
安装库:npm install sweetalert2
基础用法示例:

js实现modal弹出

import Swal from 'sweetalert2'

Swal.fire({
  title: '自定义Modal',
  html: '<p>支持HTML内容</p>',
  icon: 'info',
  confirmButtonText: '确定'
})

高级配置选项:

Swal.fire({
  title: '复杂Modal',
  showCancelButton: true,
  confirmButtonColor: '#3085d6',
  cancelButtonColor: '#d33',
  input: 'text',
  inputPlaceholder: '请输入内容...'
}).then((result) => {
  if (result.isConfirmed) {
    console.log(result.value)
  }
})

实现可拖拽Modal

为原生Modal添加拖拽功能

const modalContent = document.querySelector('.modal-content');
let isDragging = false;
let offsetX, offsetY;

modalContent.addEventListener('mousedown', (e) => {
  isDragging = true;
  offsetX = e.clientX - modalContent.getBoundingClientRect().left;
  offsetY = e.clientY - modalContent.getBoundingClientRect().top;
});

document.addEventListener('mousemove', (e) => {
  if (!isDragging) return;
  modalContent.style.left = `${e.clientX - offsetX}px`;
  modalContent.style.top = `${e.clientY - offsetY}px`;
});

document.addEventListener('mouseup', () => {
  isDragging = false;
});

需要添加CSS定位支持:

.modal-content {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
}

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

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似:…