通过单击背景来消除html对话框元素
Dismiss html dialog element by clicking the backdrop
使用material design life库创建对话框,它本质上使用底层的<dialog>
元素,是否有任何方法通过点击其背景来关闭对话框?(当点击对话框内容时,它应该而不是被取消)。
<dialog>Hi</dialog>
<button>show</button>
document.querySelector("button").addEventListener("click",
() => document.querySelector("dialog").showModal());
https://jsfiddle.net/fyjbvbqq/当显示对话框时,单击屏幕上的任何地方对应于单击dialog
元素,因此似乎没有简单的方法来确定背景是否被单击…有办法做到这一点吗?
您可以使用元素。getBoundingClientRect获取对话框的大小和位置,并测试当前客户端坐标是否在此区域内:
document.querySelector("button").addEventListener("click", () => document.querySelector("dialog").showModal());
document.querySelector("dialog").addEventListener("click", (e) => {
var rect = e.target.getBoundingClientRect();
var minX = rect.left + e.target.clientLeft;
var minY = rect.top + e.target.clientTop;
if ((e.clientX < minX || e.clientX >= minX + e.target.clientWidth) ||
(e.clientY < minY || e.clientY >= minY + e.target.clientHeight)) {
e.target.close();
}
});
<dialog>Hi</dialog>
<button>
show
</button>
当前处理这个问题的一个简洁的方法是:
dialog.addEventListener('click', ({target:dialog}) => {
if (dialog.nodeName === 'DIALOG') {
dialog.close('dismiss');
}
});
这是有效的,因为点击对话框本身将有对话框内容的nodeName(例如P
, FORM
等),而点击背景将有DIALOG
的nodeName。
来源:"加光解雇"在web.dev
相关文章:
- 使用metro-uiJS对话框调用其他文件html
- 将变量从google脚本传递到html对话框
- 在jquery对话框中加载html页面
- 如何在不使用滚动条的情况下将html页面放入弹出窗口(对话框)
- HTML中的颜色选择器对话框
- HTML”;文件“/OpenFile对话框解决方法
- 如何打开jQuery对话框并将其标题自动设置为HTML标记中的属性
- 将html保存为xls-JS保存对话框错误
- 传递要在JQuery UI对话框中使用的HTML值
- ckEditor插件iframe对话框设置html输入
- 使用 HTML 和 JQuery 的“打开”对话框的按钮
- 更改 jquery UI 对话框标题栏 HTML
- HTML 锚链接 - 带有确认对话框的 href
- 无法在 jquery.html() 之后将表单提交到 jquery ui 对话框中
- 如何将jquery数组添加到html表单中,以将复选框动态添加到对话框中
- 如何在将 html 加载到对话框中后更改标签的文本
- 将 HTML 表格放入引导程序对话框中
- 如何预加载 javascript/JQuery/HTML 对话框
- 通过单击背景来消除html对话框元素
- 创建一个HTML对话框弹出在chrome扩展