HTML – Native Dialog Modal
前言
之前介绍 Native Form 的时候有提及过 method="dialog", 但由于它太新了, 所以没去研究. 这篇就介绍一下.
Dialog 也好 Modal 也好, 都有人叫, 我的理解是 Modal 更抽象一点, Dialog 按 Material Design, 应该是要有 action 的才算. Modal 只要是 popup 的都算.
但这篇我们配合 HTML 叫它 dialog 吧.
参考:
Youtube – Use dialog for the easiest way to make a popup modal
搭场景
<button id="js-open-dialog-btn">Show Dialog</button>
<dialog class="dialog" id="js-dialog">
<h1>title</h1>
<p>
Lorem ipsum, dolor sit amet consectetur adipisicing elit. Nihil itaque deleniti eligendi
possimus perferendis necessitatibus officiis minus libero? Sapiente nisi dolores eius dicta
</p>
<button id="js-close-dialog-btn">Close Dialog</button>
</dialog>
一个 show dialog button
一个 dialog, 里面有内容和 close button
效果

dialog 会自动被隐藏起来. 看不见的.
show dialog
const openDialogBtn = document.querySelector<HTMLButtonElement>('#js-open-dialog-btn')!;
const dialog = document.querySelector<HTMLDialogElement>('#js-dialog')!;
openDialogBtn.addEventListener('click', () => {
dialog.showModal();
});
找到 dialog element 调用 showModal 它就会出来了.
HTMLDialogElement
typescript 目前没用这个类型, 所以需要自己写. 可以参考: MDN – HTMLDialogElement
interface HTMLDialogElement extends Element {
open: boolean;
returnValue: string;
show: () => void;
showModal: () => void;
close: (returnValue?: string) => void;
}
open 是看当前是 show 还是 hide, 这个命名不太好的, 应该用 opened 名词而不是动词.
show 是把 <dialog> show 出来, 但是它不会 popup 而在它原来的位置.
showModal 才是像 popup 那样 show 在中间
close 是关闭, 同时可以 passing 一个 string value 作为 return value
returnValue 是在 close 的时候 set 进去的, 默认是 empty string
default style

1. backdrop 是灰色
2. dialog 有默认的 border-width
custom style
.dialog {
&::backdrop {
background-color: rgb(255 0 0 / 0.5);
}
border-width: 0;
max-width: 50%;
}
::backdrop 可以选择到 backdrop 修改颜色
效果

scroll 逻辑

当 dialog 开启的时候 body 依然是可以 scroll 的哦.
backdrop & close 逻辑
keyboard Esc 会关闭 dialog, backdrop 的区域也属于 dialog 内. 它是无法监听到的
参考: stackoverflow – Dismiss html dialog element by clicking the backdrop
除了 Esc 只有 dialog 内自己做 button 通过 JS 才能 close dialog.
closeDialogBtn.addEventListener('click', () => {
dialog.close('some return value');
});
调用 close 的时候可以传入 return value, 通过 dialog.returnValue 获取.
event
dialog 有 2 个 event 可以监听.
1. cancel
2. close
cancel 只有在 Esc 的时候会触发
Esc, .close 都会触发 close event.
所以 Esc 会触发 cancel 然后再触发 close event.
form method="dialog"
<dialog class="dialog" id="js-dialog">
<form method="dialog">
<input name="firstName" value="Derrick" />
<button type="submit" value="value123">submit</button>
</form>
</dialog>
dialog 里面的 form method="dialog" 在 submit 时会 close dialog.
button value 会被 set to return value 里.

HTML – Native Dialog Modal的更多相关文章
- [转]jQuery UI Dialog Modal Popup Yes No Confirm example in ASP.Net
本文转自:http://www.aspsnippets.com/Articles/jQuery-UI-Dialog-Modal-Popup-Yes-No-Confirm-example-in-ASPN ...
- iframe中的jquery ui modal dialog 覆盖父窗口
在iframe中 使用jquery ui dialog,弹出后可以覆盖父窗体 ///iframe中的jquery ui modal dialog 覆盖父窗口 function openDialog() ...
- wxPython Modal Dialog 模式对话框
<wxPython in Action>chap 9 笔记 1. Modal Dialog(模式对话框) A modal dialog blocks other widgets from ...
- wx.Dialog
wx.Dialog A dialog box is a window with a title bar and sometimes a system menu, which can be moved ...
- 一起来看 HTML 5.2 中新的原生元素 <dialog>
不到一个月前,HTML 5.2 正式成为 W3C 的推荐标准(REC),其中,推出了一个新的原生模态对话框元素 <dialog>,乍一看,可能感觉它就是一个新增的元素,然而,作者最近在玩的 ...
- JqueryUI Dialog 加载动态页 部分页
问题:使用JqueryUIDialog 加载部分页,可以弹出对话框,但是在操作页面上的按钮是提示"dialog"找不到,思路是,先取到部分页加载到要dialog的Div上,在dia ...
- JQuery-UI Dialog下使用服务器端按钮失效
目标:点按钮弹出div层,选择数据后自动隐藏div,将所选数据赋值到窗体. <div id="divWinPop"> //里面是要实现弹出框的代码,包括翻页.查找等. ...
- jQuery UI 实例 - 对话框(Dialog)(zhuan)
http://www.runoob.com/jqueryui/example-dialog.html ************************************************* ...
- Jquery UI dialog 详解 (中文)
转载▼ 1 属性 1.11 autoOpen ,这个属性为true的时候dialog被调用的时候自动打开dialog窗口.当属性为false的时候,一开始隐藏窗口,知道.dialog("op ...
- jQuery.dialog
本篇文章主要是对JQUERY中dialog的用法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助 今天用到了客户端的对话框,把 jQuery UI 中的对话框学习了一下. 准备 jQ ...
随机推荐
- 外部网关协议BGP
不能全部使用RIP与OSPF的原因有二:互联网规模太大,自治系统间路由选择困难:自治系统间路由选择必须考虑有关策略. 在每一个自治系统中有两种不同功能的路由器,边界路由器和内部路由器. BGP四种报文 ...
- 解锁网络无限可能:揭秘微软工程师力作——付费代理IP池深度改造与实战部署指南
基于付费代理的代理IP池 项目来源 此项目为微软某个工程师构建的代理IP池,我对此进行了改造.可以用于生产环境中的爬虫项目 阅读前建议 阅读我之前发布的爬虫基础的文章,了解代理如何获取.使用等. 分为 ...
- php.ini文件与php.d
`php.ini` 是 PHP 的主要配置文件,用于全局配置 PHP 的行为和功能.它包含了许多 PHP 的核心设置,如内存限制.错误报告级别.扩展加载等. `php.ini` 文件通常位于 PHP ...
- MYSQL DQL in 到底会不会走索引&in 范围查询引发的思考。
前情引子 in 会不会走索引?很多人肯定会回答.废话.如果命中了索引.那肯定会走. 其实我和大多数人一样.一开始也是这么想的.直至有一个血淋淋的案子让我有所改观.有所思考. 背景介绍 业务的工单表.我 ...
- ComfyUI进阶:Comfyroll插件 (四)
ComfyUI进阶:Comfyroll插件 (四) 前言: 学习ComfyUI是一场持久战,而Comfyroll 是一款功能强大的自定义节点集合,专为 ComfyUI 用户打造,旨在提供更加丰富和专业 ...
- NIO操作文件读写
第一章 第一节,Buffuer 案例一 从buffur 读出数据, 创建了一个 FileInputStream 对象,并通过调用 getChannel() 方法获取了与之关联的 FileChanne ...
- java web 开发框架编
学习web 框架上开发需要的是安装 mysql 8.0 idea 2022 git 2.2.23 node 16以上 (新版本不好拉有些库了)jdk 最好是17以上 jdk8也是行的,反正不管 ...
- mysql数据库无法录入汉字问题
1.插入数据出现错误 show full columns from 表名;//查看数据表列编码 2. alter table 表名 change 列名 列名 varchar(自己设置) charact ...
- 【Vue】使用iframe解决多应用整合问题(微前端)
一.需求背景 有老系统需要重构,新做的系统需要做一个大一统的整合,类似一个分类栏目 在菜单位置罗列出有什么子系统应用,点击对应的应用菜单,展示区跳转到相应的子系统应用中 我用Excel简单描述了下系统 ...
- Google的TPU的Pallas扩展功能支持的数据类型
地址: https://jax.readthedocs.io/en/latest/pallas/tpu.html jnp.float32 jnp.bfloat16 jnp.int* (all prec ...