前言

之前介绍 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

MDN – HTMLDialogElement

搭场景

<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 里.

参考: MDN – The Dialog element

HTML – Native Dialog Modal的更多相关文章

  1. [转]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 ...

  2. iframe中的jquery ui modal dialog 覆盖父窗口

    在iframe中 使用jquery ui dialog,弹出后可以覆盖父窗体 ///iframe中的jquery ui modal dialog 覆盖父窗口 function openDialog() ...

  3. wxPython Modal Dialog 模式对话框

    <wxPython in Action>chap 9 笔记 1. Modal Dialog(模式对话框) A modal dialog blocks other widgets from ...

  4. wx.Dialog

    wx.Dialog A dialog box is a window with a title bar and sometimes a system menu, which can be moved ...

  5. 一起来看 HTML 5.2 中新的原生元素 <dialog>

    不到一个月前,HTML 5.2 正式成为 W3C 的推荐标准(REC),其中,推出了一个新的原生模态对话框元素 <dialog>,乍一看,可能感觉它就是一个新增的元素,然而,作者最近在玩的 ...

  6. JqueryUI Dialog 加载动态页 部分页

    问题:使用JqueryUIDialog 加载部分页,可以弹出对话框,但是在操作页面上的按钮是提示"dialog"找不到,思路是,先取到部分页加载到要dialog的Div上,在dia ...

  7. JQuery-UI Dialog下使用服务器端按钮失效

    目标:点按钮弹出div层,选择数据后自动隐藏div,将所选数据赋值到窗体. <div id="divWinPop"> //里面是要实现弹出框的代码,包括翻页.查找等. ...

  8. jQuery UI 实例 - 对话框(Dialog)(zhuan)

    http://www.runoob.com/jqueryui/example-dialog.html ************************************************* ...

  9. Jquery UI dialog 详解 (中文)

    转载▼ 1 属性 1.11 autoOpen ,这个属性为true的时候dialog被调用的时候自动打开dialog窗口.当属性为false的时候,一开始隐藏窗口,知道.dialog("op ...

  10. jQuery.dialog

    本篇文章主要是对JQUERY中dialog的用法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助 今天用到了客户端的对话框,把 jQuery UI 中的对话框学习了一下. 准备 jQ ...

随机推荐

  1. 深入解析 Vue Router:构建单页面应用的利器

    Vue.js 是一个渐进式 JavaScript 框架,常用于构建用户界面.随着应用的复杂度增加,路由(Routing)变得越来越重要,这就是 Vue Router 的用武之地.Vue Router ...

  2. 如何查看Chrome内核版本

    Blink Google chrome即谷歌浏览器原来采用的渲染引擎是Webkit,自chrome 28开始,谷歌浏览器放弃了Webkit,改用自主开发的渲染引擎Blink. 所以现在大多数喜欢尝鲜的 ...

  3. php.ini文件与php.d

    `php.ini` 是 PHP 的主要配置文件,用于全局配置 PHP 的行为和功能.它包含了许多 PHP 的核心设置,如内存限制.错误报告级别.扩展加载等. `php.ini` 文件通常位于 PHP ...

  4. [oeasy]python0037_电传打字机_打印头_print_head_carriage_词源

    换行回车 回忆上次内容 上次我们 diy了 自己的小动物 还可以 让小动物 变色.报时 还可以 说些话 这很亚文化 很酷炫的亚文化 不是吗? 回忆一下 最开始 研究报时 的 时候 回到 本行行头 的 ...

  5. [oeasy]python0031_挂起进程_恢复进程_进程切换

    ​ 查看进程 回忆上次内容 上次修改了 $PATH 路径 把当前用户shiyanlou的宿主文件夹 ~ 添加到 $PATH 中 这样 sleep.py 就可以被找到 于是就可以被执行了 还可以把配置 ...

  6. oeasy教您玩转vim - 33 - # 查找文本

    ​ 文字区块 回忆上节课内容 括号间跳转 成对括号间跳转 % 不成对括号间跳转 [( 跳转到上一个没配对的 ( [) 跳转到下一个没配对的 ) [{ 跳转到上一个没配对的 { [} 跳转到下一个没配对 ...

  7. WPF使用AppBar实现窗口停靠,适配缩放、全屏响应和多窗口并列(附封装好即开即用的附加属性)

    在吕毅大佬的文章中已经详细介绍了什么是AppBar: WPF 使用 AppBar 将窗口停靠在桌面上,让其他程序不占用此窗口的空间(附我封装的附加属性) - walterlv 即让窗口固定在屏幕某一边 ...

  8. [rCore学习笔记 013]GDB跟踪程序

    题目要求 请学习 gdb 调试工具的使用(这对后续调试很重要),并通过 gdb 简单跟踪从机器加电到跳转到 0x80200000 的简单过程.只需要描述重要的跳转即可,只需要描述在 qemu 上的情况 ...

  9. C# 算术表达式求值(后缀法),看这一篇就够了

    一.种类介绍 算术表达式有三种:前缀表达式.中缀表达式和后缀表达式.一般用的是中缀,比如1+1,前后缀就是把操作符移到前面和后面,下面简单介绍一下这三种表达式. 1.前缀表示法 前缀表示法又叫波兰表示 ...

  10. Django 继承AbstractUser扩展用户模型

    Django 继承AbstractUser扩展用户模型 by:授客 QQ:1033553122 测试环境 Win 10   Python 3.5.4   Django-2.0.13.tar.gz 官方 ...