活动公告

系统通知
05-18 21:22
系统通知
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,资源失效请在帖子内回复要求补档,会尽快处理!
10-23 09:31

Bootstrap4模态框组件使用完全手册从基础配置到高级自定义全面掌握网页弹窗设计技巧解决实际开发中遇到的各种问题提升用户体验

SunJu_FaceMall

3万

主题

2860

科技点

3万

积分

白金月票

碾压王

积分
32872

塔罗立华奏

<font color=白金月票" /> 发表于 2025-9-25 22:20:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
引言

模态框(Modal)是现代网页设计中不可或缺的UI组件,它能够在不离开当前页面的情况下显示额外信息、表单或确认对话框。Bootstrap 4作为最受欢迎的前端框架之一,提供了强大而灵活的模态框组件,使开发者能够轻松创建美观且功能丰富的弹窗。本文将全面介绍Bootstrap 4模态框的使用方法,从基础配置到高级自定义,帮助你解决实际开发中遇到的各种问题,并提升用户体验。

Bootstrap 4模态框基础配置

创建基本模态框

Bootstrap 4模态框的基本结构由HTML、CSS和JavaScript组成。下面是一个最基本的模态框示例:
  1. <!-- 触发按钮 -->
  2. <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#basicModal">
  3.   打开基本模态框
  4. </button>
  5. <!-- 模态框 -->
  6. <div class="modal fade" id="basicModal" tabindex="-1" role="dialog" aria-labelledby="basicModalLabel" aria-hidden="true">
  7.   <div class="modal-dialog" role="document">
  8.     <div class="modal-content">
  9.       <div class="modal-header">
  10.         <h5 class="modal-title" id="basicModalLabel">模态框标题</h5>
  11.         <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  12.           <span aria-hidden="true">&times;</span>
  13.         </button>
  14.       </div>
  15.       <div class="modal-body">
  16.         这里是模态框的内容区域。
  17.       </div>
  18.       <div class="modal-footer">
  19.         <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
  20.         <button type="button" class="btn btn-primary">保存更改</button>
  21.       </div>
  22.     </div>
  23.   </div>
  24. </div>
复制代码

这个基本模态框包含了所有必要的元素:

• 触发按钮:使用data-toggle="modal"和data-target属性来指定要打开的模态框
• 模态框容器:使用.modal类,并添加.fade类实现淡入淡出效果
• 模态框对话框:使用.modal-dialog类
• 模态框内容:使用.modal-content类
• 模态框头部、主体和底部:分别使用.modal-header、.modal-body和.modal-footer类

必要的依赖

要使用Bootstrap 4模态框,需要确保页面中引入了以下依赖:
  1. <!-- Bootstrap CSS -->
  2. <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
  3. <!-- jQuery -->
  4. <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
  5. <!-- Popper.js -->
  6. <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
  7. <!-- Bootstrap JS -->
  8. <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
复制代码

模态框的组成部分详解

模态框头部(Modal Header)

模态框头部通常包含标题和关闭按钮:
  1. <div class="modal-header">
  2.   <h5 class="modal-title" id="exampleModalLabel">模态框标题</h5>
  3.   <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  4.     <span aria-hidden="true">&times;</span>
  5.   </button>
  6. </div>
复制代码

• .modal-title:用于设置模态框标题的样式
• .close:用于关闭按钮的样式
• data-dismiss="modal":点击该元素会关闭模态框

模态框主体(Modal Body)

模态框主体是内容的主要区域,可以包含任何HTML内容:
  1. <div class="modal-body">
  2.   <p>这里可以放置文本、表单、图片等任何HTML内容。</p>
  3.   <form>
  4.     <div class="form-group">
  5.       <label for="recipient-name" class="col-form-label">收件人:</label>
  6.       <input type="text" class="form-control" id="recipient-name">
  7.     </div>
  8.     <div class="form-group">
  9.       <label for="message-text" class="col-form-label">消息:</label>
  10.       <textarea class="form-control" id="message-text"></textarea>
  11.     </div>
  12.   </form>
  13. </div>
复制代码

模态框底部(Modal Footer)

模态框底部通常包含操作按钮:
  1. <div class="modal-footer">
  2.   <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
  3.   <button type="button" class="btn btn-primary">发送消息</button>
  4. </div>
复制代码

模态框尺寸和变体

不同尺寸的模态框

Bootstrap 4提供了三种预设尺寸的模态框:小、默认和大:
  1. <!-- 小模态框 -->
  2. <div class="modal-dialog modal-sm">...</div>
  3. <!-- 默认模态框 -->
  4. <div class="modal-dialog">...</div>
  5. <!-- 大模态框 -->
  6. <div class="modal-dialog modal-lg">...</div>
  7. <!-- 超大模态框 -->
  8. <div class="modal-dialog modal-xl">...</div>
复制代码

全屏模态框

Bootstrap 4.2+支持全屏模态框:
  1. <!-- 全屏模态框 -->
  2. <div class="modal-dialog modal-fullscreen">...</div>
  3. <!-- 可调整的全屏模态框(在特定断点以下全屏) -->
  4. <div class="modal-dialog modal-fullscreen-sm-down">...</div>
  5. <div class="modal-dialog modal-fullscreen-md-down">...</div>
  6. <div class="modal-dialog modal-fullscreen-lg-down">...</div>
  7. <div class="modal-dialog modal-fullscreen-xl-down">...</div>
复制代码

居中模态框

要使模态框垂直居中,只需在.modal-dialog上添加.modal-dialog-centered类:
  1. <div class="modal-dialog modal-dialog-centered">...</div>
复制代码

滚动长内容

当模态框内容过长时,可以启用滚动功能:
  1. <!-- 可滚动的模态框 -->
  2. <div class="modal-dialog modal-dialog-scrollable">...</div>
复制代码

模态框选项和配置

通过数据属性配置

Bootstrap 4允许通过HTML5数据属性(data attributes)来配置模态框:
  1. <div class="modal fade" id="optionsModal" data-backdrop="static" data-keyboard="false" tabindex="-1" aria-labelledby="optionsModalLabel" aria-hidden="true">
  2.   ...
  3. </div>
复制代码

常用数据属性:

• data-backdrop:设置为static时,点击模态框背景不会关闭模态框;设置为false时,不显示背景
• data-keyboard:设置为false时,按ESC键不会关闭模态框
• data-focus:设置为true时,模态框初始化时自动聚焦
• data-show:设置为false时,模态框初始化时不显示

通过JavaScript配置

也可以通过JavaScript来配置模态框:
  1. $('#optionsModal').modal({
  2.   backdrop: 'static',
  3.   keyboard: false,
  4.   focus: true,
  5.   show: false
  6. });
复制代码

模态框事件处理

Bootstrap 4模态框提供了多个事件,允许你在模态框显示和隐藏的不同阶段执行自定义代码:
  1. $('#eventsModal').on('show.bs.modal', function (e) {
  2.   // 在模态框显示之前触发
  3.   console.log('模态框即将显示');
  4. });
  5. $('#eventsModal').on('shown.bs.modal', function (e) {
  6.   // 在模态框显示之后触发(等待CSS过渡完成)
  7.   console.log('模态框已显示');
  8. });
  9. $('#eventsModal').on('hide.bs.modal', function (e) {
  10.   // 在模态框隐藏之前触发
  11.   console.log('模态框即将隐藏');
  12. });
  13. $('#eventsModal').on('hidden.bs.modal', function (e) {
  14.   // 在模态框隐藏之后触发(等待CSS过渡完成)
  15.   console.log('模态框已隐藏');
  16. });
  17. $('#eventsModal').on('hidePrevented.bs.modal', function (e) {
  18.   // 当模态框尝试隐藏但被阻止时触发(例如,当backdrop设置为static时)
  19.   console.log('模态框隐藏被阻止');
  20. });
复制代码

模态框方法调用

Bootstrap 4提供了几种方法来控制模态框的行为:
  1. // 显示模态框
  2. $('#methodsModal').modal('show');
  3. // 隐藏模态框
  4. $('#methodsModal').modal('hide');
  5. // 切换模态框的显示状态
  6. $('#methodsModal').modal('toggle');
  7. // 处理模态框实例
  8. var modalInstance = $('#methodsModal').modal('getInstance');  // 返回模态框的实例
  9. var modalInstance = $('#methodsModal').modal('getInstance'); // 如果实例不存在,则创建一个新的实例
复制代码

高级自定义技巧

动态加载内容

有时我们需要在模态框中动态加载内容,可以通过AJAX实现:
  1. $('#dynamicContentModal').on('show.bs.modal', function (e) {
  2.   var modal = $(this);
  3.   // 加载远程内容
  4.   $.get('remote-content.html', function (data) {
  5.     modal.find('.modal-body').html(data);
  6.   });
  7. });
复制代码

表单验证

在模态框中实现表单验证:
  1. <div class="modal fade" id="formValidationModal" tabindex="-1" role="dialog" aria-labelledby="formValidationModalLabel" aria-hidden="true">
  2.   <div class="modal-dialog" role="document">
  3.     <div class="modal-content">
  4.       <div class="modal-header">
  5.         <h5 class="modal-title" id="formValidationModalLabel">表单验证示例</h5>
  6.         <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  7.           <span aria-hidden="true">&times;</span>
  8.         </button>
  9.       </div>
  10.       <div class="modal-body">
  11.         <form id="validationForm" novalidate>
  12.           <div class="form-group">
  13.             <label for="username">用户名</label>
  14.             <input type="text" class="form-control" id="username" required>
  15.             <div class="invalid-feedback">
  16.               请输入用户名。
  17.             </div>
  18.           </div>
  19.           <div class="form-group">
  20.             <label for="email">电子邮件</label>
  21.             <input type="email" class="form-control" id="email" required>
  22.             <div class="invalid-feedback">
  23.               请输入有效的电子邮件地址。
  24.             </div>
  25.           </div>
  26.         </form>
  27.       </div>
  28.       <div class="modal-footer">
  29.         <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
  30.         <button type="button" class="btn btn-primary" id="submitForm">提交</button>
  31.       </div>
  32.     </div>
  33.   </div>
  34. </div>
  35. <script>
  36.   $(document).ready(function() {
  37.     $('#submitForm').click(function() {
  38.       var form = document.getElementById('validationForm');
  39.       
  40.       if (form.checkValidity() === false) {
  41.         event.preventDefault();
  42.         event.stopPropagation();
  43.       }
  44.       
  45.       form.classList.add('was-validated');
  46.       
  47.       if (form.checkValidity() === true) {
  48.         // 表单验证通过,可以提交数据
  49.         alert('表单验证通过!');
  50.         $('#formValidationModal').modal('hide');
  51.       }
  52.     });
  53.   });
  54. </script>
复制代码

模态框嵌套

虽然不推荐,但在某些情况下可能需要嵌套模态框:
  1. <!-- 主模态框 -->
  2. <div class="modal fade" id="mainModal" tabindex="-1" role="dialog" aria-labelledby="mainModalLabel" aria-hidden="true">
  3.   <div class="modal-dialog" role="document">
  4.     <div class="modal-content">
  5.       <div class="modal-header">
  6.         <h5 class="modal-title" id="mainModalLabel">主模态框</h5>
  7.         <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  8.           <span aria-hidden="true">&times;</span>
  9.         </button>
  10.       </div>
  11.       <div class="modal-body">
  12.         <p>这是主模态框的内容。</p>
  13.         <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#nestedModal">
  14.           打开嵌套模态框
  15.         </button>
  16.       </div>
  17.       <div class="modal-footer">
  18.         <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
  19.       </div>
  20.     </div>
  21.   </div>
  22. </div>
  23. <!-- 嵌套模态框 -->
  24. <div class="modal fade" id="nestedModal" tabindex="-1" role="dialog" aria-labelledby="nestedModalLabel" aria-hidden="true">
  25.   <div class="modal-dialog" role="document">
  26.     <div class="modal-content">
  27.       <div class="modal-header">
  28.         <h5 class="modal-title" id="nestedModalLabel">嵌套模态框</h5>
  29.         <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  30.           <span aria-hidden="true">&times;</span>
  31.         </button>
  32.       </div>
  33.       <div class="modal-body">
  34.         <p>这是嵌套模态框的内容。</p>
  35.       </div>
  36.       <div class="modal-footer">
  37.         <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
  38.       </div>
  39.     </div>
  40.   </div>
  41. </div>
复制代码

自定义动画

可以通过覆盖CSS来实现自定义动画效果:
  1. /* 自定义模态框动画 */
  2. .custom-modal .modal-dialog {
  3.   transition: transform 0.3s ease-out;
  4.   transform: translate(0, -50px);
  5. }
  6. .custom-modal.show .modal-dialog {
  7.   transform: translate(0, 0);
  8. }
  9. /* 自定义背景淡入效果 */
  10. .custom-modal .modal-backdrop {
  11.   transition: opacity 0.3s ease-out;
  12.   opacity: 0;
  13. }
  14. .custom-modal.show .modal-backdrop {
  15.   opacity: 0.5;
  16. }
复制代码

实际开发中的问题解决方案

模态框中的视频自动播放

在模态框中嵌入视频并实现自动播放:
  1. <div class="modal fade" id="videoModal" tabindex="-1" role="dialog" aria-labelledby="videoModalLabel" aria-hidden="true">
  2.   <div class="modal-dialog modal-lg" role="document">
  3.     <div class="modal-content">
  4.       <div class="modal-header">
  5.         <h5 class="modal-title" id="videoModalLabel">视频播放</h5>
  6.         <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  7.           <span aria-hidden="true">&times;</span>
  8.         </button>
  9.       </div>
  10.       <div class="modal-body">
  11.         <div class="embed-responsive embed-responsive-16by9">
  12.           <iframe class="embed-responsive-item" src="" id="videoFrame" allowscriptaccess="always" allow="autoplay"></iframe>
  13.         </div>
  14.       </div>
  15.     </div>
  16.   </div>
  17. </div>
  18. <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#videoModal" data-video="https://www.youtube.com/embed/dQw4w9WgXcQ?autoplay=1">
  19.   播放视频
  20. </button>
  21. <script>
  22.   $('#videoModal').on('show.bs.modal', function (e) {
  23.     var button = $(e.relatedTarget); // 触发模态框的按钮
  24.     var videoUrl = button.data('video'); // 从data-video属性获取视频URL
  25.     var modal = $(this);
  26.     modal.find('#videoFrame').attr('src', videoUrl);
  27.   });
  28.   $('#videoModal').on('hidden.bs.modal', function (e) {
  29.     var modal = $(this);
  30.     modal.find('#videoFrame').attr('src', ''); // 清空视频URL以停止播放
  31.   });
  32. </script>
复制代码

解决模态框与z-index冲突

当页面中有多个使用z-index的元素时,可能会出现模态框被其他元素遮挡的问题:
  1. /* 确保模态框在最顶层 */
  2. .modal {
  3.   z-index: 1050 !important;
  4. }
  5. .modal-backdrop {
  6.   z-index: 1040 !important;
  7. }
  8. /* 如果有其他元素需要调整 */
  9. .other-high-z-index-element {
  10.   z-index: 1030;
  11. }
复制代码

模态框中的表单提交处理

处理模态框中的表单提交并更新页面内容:
  1. <div class="modal fade" id="formSubmitModal" tabindex="-1" role="dialog" aria-labelledby="formSubmitModalLabel" aria-hidden="true">
  2.   <div class="modal-dialog" role="document">
  3.     <div class="modal-content">
  4.       <div class="modal-header">
  5.         <h5 class="modal-title" id="formSubmitModalLabel">添加用户</h5>
  6.         <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  7.           <span aria-hidden="true">&times;</span>
  8.         </button>
  9.       </div>
  10.       <div class="modal-body">
  11.         <form id="userForm">
  12.           <div class="form-group">
  13.             <label for="userName">姓名</label>
  14.             <input type="text" class="form-control" id="userName" required>
  15.           </div>
  16.           <div class="form-group">
  17.             <label for="userEmail">电子邮件</label>
  18.             <input type="email" class="form-control" id="userEmail" required>
  19.           </div>
  20.         </form>
  21.       </div>
  22.       <div class="modal-footer">
  23.         <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
  24.         <button type="button" class="btn btn-primary" id="saveUser">保存</button>
  25.       </div>
  26.     </div>
  27.   </div>
  28. </div>
  29. <div class="container mt-4">
  30.   <h2>用户列表</h2>
  31.   <button type="button" class="btn btn-primary mb-3" data-toggle="modal" data-target="#formSubmitModal">
  32.     添加新用户
  33.   </button>
  34.   <table class="table table-bordered">
  35.     <thead>
  36.       <tr>
  37.         <th>ID</th>
  38.         <th>姓名</th>
  39.         <th>电子邮件</th>
  40.       </tr>
  41.     </thead>
  42.     <tbody id="userTableBody">
  43.       <tr>
  44.         <td>1</td>
  45.         <td>张三</td>
  46.         <td>zhangsan@example.com</td>
  47.       </tr>
  48.       <tr>
  49.         <td>2</td>
  50.         <td>李四</td>
  51.         <td>lisi@example.com</td>
  52.       </tr>
  53.     </tbody>
  54.   </table>
  55. </div>
  56. <script>
  57.   $(document).ready(function() {
  58.     var userIdCounter = 3; // 用于生成新用户ID
  59.    
  60.     $('#saveUser').click(function() {
  61.       var name = $('#userName').val();
  62.       var email = $('#userEmail').val();
  63.       
  64.       if (name && email) {
  65.         // 创建新的表格行
  66.         var newRow = '<tr>' +
  67.           '<td>' + userIdCounter + '</td>' +
  68.           '<td>' + name + '</td>' +
  69.           '<td>' + email + '</td>' +
  70.           '</tr>';
  71.         
  72.         // 添加到表格中
  73.         $('#userTableBody').append(newRow);
  74.         
  75.         // 重置表单
  76.         $('#userForm')[0].reset();
  77.         
  78.         // 关闭模态框
  79.         $('#formSubmitModal').modal('hide');
  80.         
  81.         // 增加ID计数器
  82.         userIdCounter++;
  83.         
  84.         // 显示成功消息
  85.         alert('用户添加成功!');
  86.       } else {
  87.         alert('请填写所有必填字段!');
  88.       }
  89.     });
  90.   });
  91. </script>
复制代码

模态框中的图片画廊

创建一个图片画廊模态框:
  1. <div class="container mt-4">
  2.   <h2>图片画廊</h2>
  3.   <div class="row">
  4.     <div class="col-md-4 mb-4">
  5.       <img src="https://picsum.photos/seed/img1/300/200.jpg" class="img-fluid gallery-img" data-toggle="modal" data-target="#imageGalleryModal" data-img-src="https://io.pixtech.org/pixtech/forum/202509/25/9de120f89b7645c3.webp" data-img-title="图片 1">
  6.     </div>
  7.     <div class="col-md-4 mb-4">
  8.       <img src="https://picsum.photos/seed/img2/300/200.jpg" class="img-fluid gallery-img" data-toggle="modal" data-target="#imageGalleryModal" data-img-src="https://io.pixtech.org/pixtech/forum/202509/25/ab13bdcc51ac4f00.webp" data-img-title="图片 2">
  9.     </div>
  10.     <div class="col-md-4 mb-4">
  11.       <img src="https://picsum.photos/seed/img3/300/200.jpg" class="img-fluid gallery-img" data-toggle="modal" data-target="#imageGalleryModal" data-img-src="https://io.pixtech.org/pixtech/forum/202509/25/5ed794f5e8d7460a.webp" data-img-title="图片 3">
  12.     </div>
  13.   </div>
  14. </div>
  15. <!-- 图片画廊模态框 -->
  16. <div class="modal fade" id="imageGalleryModal" tabindex="-1" role="dialog" aria-labelledby="imageGalleryModalLabel" aria-hidden="true">
  17.   <div class="modal-dialog modal-lg" role="document">
  18.     <div class="modal-content">
  19.       <div class="modal-header">
  20.         <h5 class="modal-title" id="imageGalleryModalLabel">图片预览</h5>
  21.         <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  22.           <span aria-hidden="true">&times;</span>
  23.         </button>
  24.       </div>
  25.       <div class="modal-body text-center">
  26.         <img src="" id="modalImage" class="img-fluid" alt="预览图片">
  27.         <p class="mt-3" id="modalImageTitle"></p>
  28.       </div>
  29.       <div class="modal-footer">
  30.         <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
  31.       </div>
  32.     </div>
  33.   </div>
  34. </div>
  35. <script>
  36.   $('#imageGalleryModal').on('show.bs.modal', function (e) {
  37.     var button = $(e.relatedTarget); // 触发模态框的图片
  38.     var imgSrc = button.data('img-src'); // 获取大图URL
  39.     var imgTitle = button.data('img-title'); // 获取图片标题
  40.    
  41.     var modal = $(this);
  42.     modal.find('#modalImage').attr('src', imgSrc);
  43.     modal.find('#modalImageTitle').text(imgTitle);
  44.   });
  45. </script>
复制代码

提升用户体验的最佳实践

响应式设计

确保模态框在不同设备上都有良好的显示效果:
  1. <div class="modal fade" id="responsiveModal" tabindex="-1" role="dialog" aria-labelledby="responsiveModalLabel" aria-hidden="true">
  2.   <!-- 在小屏幕上使用全屏模态框 -->
  3.   <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable modal-fullscreen-sm-down" role="document">
  4.     <div class="modal-content">
  5.       <div class="modal-header">
  6.         <h5 class="modal-title" id="responsiveModalLabel">响应式模态框</h5>
  7.         <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  8.           <span aria-hidden="true">&times;</span>
  9.         </button>
  10.       </div>
  11.       <div class="modal-body">
  12.         <p>这是一个响应式模态框,在小屏幕上会全屏显示,在大屏幕上居中显示。</p>
  13.         <!-- 添加更多内容以测试滚动效果 -->
  14.         <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in dui mauris. Vivamus hendrerit arcu sed erat molestie vehicula. Sed auctor neque eu tellus rhoncus ut eleifend nibh porttitor.</p>
  15.         <p>Ut in nulla enim. Phasellus molestie magna non est bibendum non venenatis nisl tempor. Suspendisse dictum feugiat nisl ut dapibus. Mauris iaculis porttitor posuere.</p>
  16.         <p>Praesent id metus massa, ut blandit odio. Proin quis tortor orci. Etiam at risus et justo dignissim congue. Donec congue lacinia dui, a porttitor lectus condimentum laoreet.</p>
  17.       </div>
  18.       <div class="modal-footer">
  19.         <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
  20.         <button type="button" class="btn btn-primary">保存更改</button>
  21.       </div>
  22.     </div>
  23.   </div>
  24. </div>
复制代码

加载状态

在模态框中显示加载状态,提升用户体验:
  1. <div class="modal fade" id="loadingModal" tabindex="-1" role="dialog" aria-labelledby="loadingModalLabel" aria-hidden="true">
  2.   <div class="modal-dialog modal-dialog-centered" role="document">
  3.     <div class="modal-content">
  4.       <div class="modal-header">
  5.         <h5 class="modal-title" id="loadingModalLabel">处理中</h5>
  6.       </div>
  7.       <div class="modal-body text-center">
  8.         <div class="spinner-border text-primary" role="status">
  9.           <span class="sr-only">加载中...</span>
  10.         </div>
  11.         <p class="mt-3">请稍候,正在处理您的请求...</p>
  12.       </div>
  13.     </div>
  14.   </div>
  15. </div>
  16. <button type="button" class="btn btn-primary" id="showLoadingModal">显示加载模态框</button>
  17. <script>
  18.   $('#showLoadingModal').click(function() {
  19.     // 显示加载模态框
  20.     $('#loadingModal').modal('show');
  21.    
  22.     // 模拟异步操作
  23.     setTimeout(function() {
  24.       // 关闭加载模态框
  25.       $('#loadingModal').modal('hide');
  26.       
  27.       // 显示成功消息
  28.       alert('操作完成!');
  29.     }, 3000); // 3秒后完成
  30.   });
  31. </script>
复制代码

键盘导航

为模态框添加键盘导航功能,提升可访问性:
  1. <div class="modal fade" id="keyboardNavModal" tabindex="-1" role="dialog" aria-labelledby="keyboardNavModalLabel" aria-hidden="true">
  2.   <div class="modal-dialog" role="document">
  3.     <div class="modal-content">
  4.       <div class="modal-header">
  5.         <h5 class="modal-title" id="keyboardNavModalLabel">键盘导航示例</h5>
  6.         <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  7.           <span aria-hidden="true">&times;</span>
  8.         </button>
  9.       </div>
  10.       <div class="modal-body">
  11.         <p>这个模态框支持键盘导航:</p>
  12.         <ul>
  13.           <li>按 ESC 键关闭模态框</li>
  14.           <li>按 Tab 键在元素之间导航</li>
  15.           <li>按 Enter 键激活按钮</li>
  16.         </ul>
  17.         <form>
  18.           <div class="form-group">
  19.             <label for="keyboardInput">输入框</label>
  20.             <input type="text" class="form-control" id="keyboardInput">
  21.           </div>
  22.         </form>
  23.       </div>
  24.       <div class="modal-footer">
  25.         <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
  26.         <button type="button" class="btn btn-primary">确定</button>
  27.       </div>
  28.     </div>
  29.   </div>
  30. </div>
复制代码

自动关闭模态框

设置模态框在一定时间后自动关闭:
  1. <div class="modal fade" id="autoCloseModal" tabindex="-1" role="dialog" aria-labelledby="autoCloseModalLabel" aria-hidden="true">
  2.   <div class="modal-dialog modal-dialog-centered" role="document">
  3.     <div class="modal-content">
  4.       <div class="modal-header">
  5.         <h5 class="modal-title" id="autoCloseModalLabel">自动关闭模态框</h5>
  6.         <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  7.           <span aria-hidden="true">&times;</span>
  8.         </button>
  9.       </div>
  10.       <div class="modal-body">
  11.         <p>这个模态框将在 <span id="countdown">5</span> 秒后自动关闭。</p>
  12.         <div class="progress">
  13.           <div id="progressBar" class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" style="width: 100%"></div>
  14.         </div>
  15.       </div>
  16.     </div>
  17.   </div>
  18. </div>
  19. <button type="button" class="btn btn-primary" id="showAutoCloseModal">显示自动关闭模态框</button>
  20. <script>
  21.   $('#showAutoCloseModal').click(function() {
  22.     // 显示模态框
  23.     $('#autoCloseModal').modal('show');
  24.    
  25.     // 设置倒计时
  26.     var countdown = 5;
  27.     $('#countdown').text(countdown);
  28.    
  29.     // 设置进度条
  30.     var progressBar = $('#progressBar');
  31.     progressBar.css('width', '100%');
  32.    
  33.     // 开始倒计时
  34.     var countdownInterval = setInterval(function() {
  35.       countdown--;
  36.       $('#countdown').text(countdown);
  37.       
  38.       // 更新进度条
  39.       var progressWidth = (countdown / 5) * 100;
  40.       progressBar.css('width', progressWidth + '%');
  41.       
  42.       // 倒计时结束
  43.       if (countdown <= 0) {
  44.         clearInterval(countdownInterval);
  45.         $('#autoCloseModal').modal('hide');
  46.       }
  47.     }, 1000);
  48.   });
  49.   
  50.   // 如果手动关闭模态框,清除倒计时
  51.   $('#autoCloseModal').on('hidden.bs.modal', function (e) {
  52.     clearInterval(countdownInterval);
  53.   });
  54. </script>
复制代码

总结

Bootstrap 4模态框是一个功能强大且灵活的组件,通过本文的详细介绍,你已经掌握了从基础配置到高级自定义的各种技巧。我们学习了如何创建基本模态框、配置不同尺寸和样式、处理事件、调用方法,以及解决实际开发中的常见问题。

通过应用这些知识,你可以创建出用户体验优秀的模态框,提升网页的交互性和功能性。记住,好的模态框设计应该简洁明了,不要过度使用,并且要考虑到可访问性和响应式设计。

希望本文能够帮助你在实际开发中更好地使用Bootstrap 4模态框组件,创造出更加出色的网页应用!
「七転び八起き(ななころびやおき)」
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则