modal-jngcs 简单的移动端modal插件

modal.js是一款基于HTML、CSS和JavaScript构建的移动端浏览器插件,提供展示模态框及监听基本事件的能力。它支持自定义样式,无需框架即可运行。本文介绍其快速启动、功能使用、事件监听及常见问题解答。

modal.js Guidance

项目地址
功能体验
modal.js is a mobile-browser plugin build with HTML CSS and JavaScript.

It provide the ability to show the model in your mobile-browser, and listen the basic events.

You can also make your own style modal whether the plugin’s style.

The modal.js rely on pure js,you can run it without any frame.

Quick Start

  1. import js

    <!-- v0需要粘贴html,v1不需要粘贴html,两者不互相兼容 -->
    <!-- v0.x.x -->
    <script src="https://jngcs.top/common/modalv0/modal.min.js"></script>
    <!-- v1.x.x -->
    <script src="https://jngcs.top/common/modalv1/modal.min.js"></script>
    
  2. import css

    <link href="https://jngcs.top/common/modal/modal.min.css" rel="stylesheet" />
    
  3. if you use modalv0, copy code below, then paste under the <body> element and must under the <body>

    if you use modalv1, you needn’t copy the html.

    <!-- modal -->
    <div id="mask" style="display: none;"></div>
    <div id="modal" style="display: none;">
        <div class="modal-content">
    	<div class="modal-title"></div>
    	    <div class="modal-msg">哈哈哈</div>
    	</div>
    	<div class="modal-button"></div>
    </div>
    

Function

  • Modal.set()

    Initialize the modal.

  • Modal.set().show()

    show the modal. must call set() before show() like Modal.set().show();

  • Modal.hide()

    hide the modal.

Options

function set()
PropertyTypeDefault valueDescription
typestringtoastmodal type.
content_titlestringnonemodal title.
content_msgstringmodal content message.
cancel_textstring取消text of cancel button.
confirm_textstring确定text of confirm button.
need_rebuildnumber0is modal need rebuild.
toast_timenumber1500show time while type = ‘toast’.
animationstringfadeanimation.
  • legal value of type

    ValueDescription
    toastno button, timeout with 1500ms.
    alertwith only confirm button, no timeout.
    confirmwith cancel and confirm buttons, no timeout.
  • legal value of content_title

    ValueDescription
    nonedon’t need modal title
  • legal value of need_rebuild

    ValueDescription
    0use modal default style.
    1rebuild your style modal, you can rewrite HTML, CSS.
  • legal value of animation

    ValueDescription
    fademodal fade slowly.
    popmodal pop up and fall down slowly.
function show()
PropertyTypeDefault valueDescription
successfunctioncallback after success
failfunctioncallback after fail

How To Listen

If you use the default style, modal.js provider the className for you.

alert type

modal.js provide className .modal-btn-confirm in confirm button.

confirm type

modal.js provide classNmae .modal-btn-cancel and .modal-btn-confirm .

You can listen the events by className in your business logic like this:

var confirmBtn = document.getElementsByClassName('modal-btn-confirm')[0];
confirmBtn.addEventListener('click', function() {
    // DO SOMETHING HERE
    Modal.hide();
})

If you use mui to listen like this:

mui('#modal').on('tap', '.modal-btn-cancel', function() {
	console.log('cancel');
	Modal.hide();
});

Remember to use mui().off()to cancel the listener after your work, or the code in listener will be called many times.

Example

// 在业务逻辑中显示模态框
Modal.set({
	type: 'alert',
	content_title: 'title',
	content_msg: 'message',
    animation: 'fade'
}).show({
	success: function(res) {
		console.log(res);
        // 监听modal.js提供的按钮class,并执行业务,最后关闭modal
        var confirmBtn = document.getElementsByClassName('modal-btn-confirm')[0];
		confirmBtn.addEventListener('click', function() {
    		// DO SOMETHING HERE
    		Modal.hide();
		})
	},
    fail: function(res) {
        console.log(res);
        // ...
        Modal.hide();
    }
});

Attention ☆

  • The Id and className modal.js used:

    #mask
    #modal
    .modal-content
    .modal-title
    .modal-msg
    .modal-button
    .modal-btn-cancel
    .modal-btn-confirm
    @keyframes fade
    @keyframes pop
    @keyframes mask-show
    

    make sure not to use them in other place.

  • If you use the default style, don’t modify the html and css in Quict Start.

  • Call function set() before use show(), otherwise the modal will not work.

  • If you use mui to listen, remember to use mui().off()to cancel the listener, or the code in listener will be called many times.

FAQ

  1. Q: The animation didn’t work?

    A: modal.js is still in Alpha edition, something maybe is testing.

  2. Q: How to rebuild?

    A: Use the property need_rebuild: 1 in set(). Then you can modify html and css you like.

Update Notes

v0.0.2 Alpha(13/3/2020):

  • 新增错误捕获功能
  • 删除show()函数的默认成功回调函数内部功能

v0.0.3 Alpha(13/3/2020):

  • 新增链式调用顺序要求

v0.1.1 Alpha(14/3/2020):

  • 新增动画效果
  • 修复同一页面下存在有或无标题的两种模态框情况下,导致消息高度变化的问题

v0.1.2 Alpha(15/3/2020):

  • 修复mask动画短暂黑屏的问题
  • 修复由于未对对象进行深度复制导致内容异常的问题
  • 优化show()函数成功后回调函数的执行顺序

v0.1.3 Alpha(18/3/2020)

  • 新增modal离场动画
  • 优化modal圆角尺寸
  • 删除hide()函数的回调函数

v0.1.4 Alpha(19/3/2020)

  • 修复真机情况下modal离场动画不起效的问题

v0.2.0 Beta(22/3/2020)

  • 修复了show()函数中回调函数深度复制后出错的问题
  • 版本迭代到Beta版

v1.0.0 Beta (22/4/2020)

  • 新增页面dom监听,动态插入modal元素,不用再粘贴html代码。
  • 由于dom的监听事件,不再支持IE8以下浏览器。
  • 1.0.0版本为大版本更新,不向前兼容。
<think> 嗯,用户这次的问题很明确,是要了解Bootstrap中modal-dialog和modal-dialog-scrollable的使用方法和特性。从用户提供的站内引用来看,用户似乎正在开发一个包含模态框的web应用,其中引用了人工智能选择功能的模态框代码片段。不过用户特别说明这些引用仅供参考,真正的需求是关于这两个类名的技术细节。 用户可能是前端开发者,正在使用Bootstrap框架构建交互界面。考虑到用户特意区分了modal-dialog和modal-dialog-scrollable,应该是遇到了滚动条控制的具体需求。这类问题通常出现在需要处理长内容模态框的场景中,比如用户可能正在设计包含大量表单字段或长文本的弹窗。 关于modal-dialog的基础特性:这是创建模态框容器的核心类,控制着模态框的基本尺寸和位置。默认居中显示,宽度自适应。用户可能需要注意配合modal-content使用,这是Bootstrap的标准结构。 而modal-dialog-scrollable这个类就更有意思了。它的设计解决了模态框内容过长时的显示问题——不是让整个页面滚动,而是让模态框内部滚动。这个特性在移动端尤其重要,能防止模态框内容溢出视口。用户可能正在处理类似长表格或日志展示的需求。 需要重点说明两者的组合用法:当内容高度不确定时,同时使用modal-dialog和modal-dialog-scrollable是最佳实践。记得提醒用户滚动条只作用于modal-body区域,这样页头页脚能保持固定。 用户可能还会遇到的一个陷阱是响应式设计:在超小屏幕上,Bootstrap会自动将模态框宽度设为全屏,这时候滚动条行为可能会变化。这个细节值得在回答中强调。 考虑到这是比较具体的组件使用问题,后续可以建议用户查阅Bootstrap官方文档的Modal版块,特别是Scrollable部分。不过当前回答应该已经覆盖了核心用法。 </think> 好的,关于 Bootstrap 中的 `modal-dialog` 和 `modal-dialog-scrollable` 类,以下是它们的使用方法、特性及区别: **核心概念:** 在 Bootstrap 的模态框 (Modal) 结构中,`modal-dialog` 是 **必需的** 核心容器类,它包裹着 `modal-content`(包含模态框的头部、主体和底部)。`modal-dialog-scrollable` 是一个 **可选的修饰符类**,用于控制模态框内容的滚动行为。 ### 1. `modal-dialog` * **功能与作用:** * 定义模态框对话框本身的容器。 * 控制模态框的基本布局、最大宽度、位置(居中)。 * 设置模态框相对于视口的默认外边距。 * 是构建任何 Bootstrap 模态框的基础结构元素。 * **特性:** * **居中显示:** 默认将模态框垂直水平居中于视口中。 * **响应式宽度:** 有预设的最大宽度 (`max-width`)。在小屏幕上(如手机),模态框会占据接近全屏宽度;在中等和大屏幕上,模态框会有固定的最大宽度(默认为 `500px`,可以通过 `.modal-lg`, `.modal-xl`, `.modal-fullscreen` 或自定义 CSS 修改)。 * **外边距:** 在所有视口尺寸上都有适当的外边距 (`margin`),确保模态框不与视口边缘接触。 * **定位:** 使用 `position: relative`。 * **基本结构 (必需的):** ```html <div class="modal fade" id="myModal" tabindex="-1" aria-hidden="true"> <div class="modal-dialog"> <!-- 核心容器 --> <div class="modal-content"> <!-- 内容容器 --> <div class="modal-header">...</div> <div class="modal-body">...</div> <div class="modal-footer">...</div> </div> </div> </div> ``` * **使用方法:** * 任何 Bootstrap 模态框都 **必须** 在 `.modal` 元素内部包含一个 `.modal-dialog` 元素。 * 它是模态框视觉呈现的骨架。 ### 2. `modal-dialog-scrollable` * **功能与作用:** * 当模态框的内容(主要是 `.modal-body`)高度 **过长**,超出视口或模态框自身最大高度时,启用模态框 **内部滚动**。 * 确保 **只有 `.modal-body` 区域会滚动**,而 `.modal-header` 和 `.modal-footer` 保持固定在原位。 * **特性:** * **内部滚动:** 将 `overflow-y: auto` 应用于 `.modal-body`。 * **固定页眉页脚:** 通过限制 `.modal-content` 的最大高度 (`max-height`) 并启用 `display: flex` 和 `flex-direction: column`,使得 `.modal-header` 和 `.modal-footer` 不会随内容滚动而消失,始终可见。 * **优化长内容:** 专门设计用于处理模态框中包含大量文本、长列表或表单等导致高度过大的情况。 * **使用方法:** * 将 `modal-dialog-scrollable` 类 **添加** 到已有的 `.modal-dialog` 类旁边。 ```html <div class="modal fade" id="myLongModal" tabindex="-1" aria-hidden="true"> <div class="modal-dialog modal-dialog-scrollable"> <!-- 添加 scrollable 类 --> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">长内容标题</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <!-- 这里是非常非常长的内容(文本、列表、表格等) --> <p>...</p> <p>...</p> <!-- 更多内容,足以产生垂直滚动条 --> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">关闭</button> <button type="button" class="btn btn-primary">保存</button> </div> </div> </div> </div> ``` * **关键效果:** * 当 `.modal-body` 内容过长时,**仅该区域** 会出现垂直滚动条。 * 用户滚动查看长内容时,上方的标题 (`modal-header`) 和下方的按钮 (`modal-footer`) **保持固定不动**,始终可见,提供良好的用户体验。 ### 总结对比 | 特性 | `modal-dialog` | `modal-dialog-scrollable` | | :----------------------- | :------------------------------------------- | :----------------------------------------------------------- | | **必要性** | **必需** - 模态框的核心结构组件。 | **可选** - 仅在模态框内容可能很长时才需要。 | | **主要功能** | 定义模态框容器,控制基本布局、宽度和居中。 | 启用模态框内部滚动 (仅 `.modal-body` 滚动),固定页眉页脚。 | | **滚动行为** | 如果内容过高,可能导致 **整个视窗(页面)滚动** (不理想)。 | 强制 **模态框内部 `.modal-body` 区域滚动**,页面本身不滚动。 | | **页眉页脚 (`header`/`footer`)** | 如果内容过长滚动,页眉页脚会 **移出可视区域**。 | 页眉页脚 **固定** 在模态框顶部和底部,滚动时始终可见。 | | **使用场景** | 所有模态框的基础。 | 包含大量文本、长列表、大型表单、详细数据展示等 **长内容** 的模态框。 | **最佳实践建议:** * 总是使用 `.modal-dialog` 作为模态框内容的外层容器。 * 当您预期模态框的 `.modal-body` 内容可能会很长,超出屏幕高度时,**务必添加 `.modal-dialog-scrollable` 类** 到 `.modal-dialog` 上。这能提供更好的用户体验,防止整个页面滚动或关键操作按钮(在 Footer 中)被推出视口。 * 使用 `.modal-lg`, `.modal-xl`, `.modal-fullscreen` 等类可以与 `.modal-dialog-scrollable` 一起使用,以控制对话框的宽度/全屏状态,同时保持内部滚动特性。 #### 引用说明 Bootstrap 的模态框组件设计确保了弹窗内容的灵活展示,其中 `modal-dialog` 控制基础结构,而 `modal-dialog-scrollable` 则专门处理长内容场景,两者共同优化了用户交互体验[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值