前言

之前介绍 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. PowerBuilder编程新思维6.5:外传1(PowerPlume的设计与规划)

    <第五部分 Otherside 意外的宝藏> 每一颗种子都有发芽的梦想.PowerPlume(孔雀翎)开发交流群:286502392    PowerBuilder编程新思维6.5:外传1 ...

  2. 基于 Impala 的高性能数仓建设实践之虚拟数仓

    导读:本文主要介绍网易数帆 NDH 在 Impala 上实现的虚拟数仓特性,包括资源分组.水平扩展.混合分组和分时复用等功能,可以灵活配置集群资源.均衡节点负载.提高查询并发,并充分利用节点资源. 接 ...

  3. 搭建php环境

    nginx安装在宿主机上 db: 正式采用阿里云rds 测试使用docker安装 注意:报错一般都是需要配置国内镜像源,看之前的配置记录. 除了关闭防火墙,还要设置这个(本地开发环境) 永久关闭 SE ...

  4. 对精确率(P)、召回率(R)、F1值的理解以及对应的实现

    对精确率.召回率.F1值的理解 算法理解 在机器学习中,P.R和F1值在各种评测中很常见,那么到底什么是P.R.F1值呢,怎么理解呢,困扰了很多人,下面给我对P.R.F1值的理解, 首先,我们先看一个 ...

  5. git篇-- Git在项目实操中常见的使用命令--02

    Git是现代软件开发中不可或缺的版本控制工具.它能帮助开发者跟踪项目的所有变更,并与团队成员高效协作.本文将介绍一些在项目实操中常见的Git命令,帮助你更好地管理代码. 1. 初始化和配置 初始化仓库 ...

  6. 【H5】11 表格

    概述: 在HTML中一个很普通的任务是构建表格数据,有大量的元素和属性是来满足这种需求的. 只需要一点儿的CSS来设定风格,HTML让在web上显示表格数据变的很容易,例如你的学校的教学计划,你当地的 ...

  7. 【ECharts】04 数据交互

    ECharts 异步加载数据 ECharts 通常数据设置在 setOption 中,如果我们需要异步加载数据,可以配合 jQuery等工具,在异步获取数据后通过 setOption 填入数据和配置项 ...

  8. 【Layui】10 颜色选择器 ColorPicker

    文档地址: https://www.layui.com/demo/colorpicker.html 常规选择器: <fieldset class="layui-elem-field l ...

  9. python性能分析器:line_profiler

    代码: import line_profiler import sys def test(): for i in range(0, 10): print( i**2 ) print("End ...

  10. 汽车模具设计软件 —— 达索集团的Catia

    相关: https://www.3ds.com/zh/products-services/catia/ Catia是Dassault Systems公司推出的产品造型软件,广泛应用于汽车.航空.机械等 ...