”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Popver API VS 对话框模态:相同但不同

Popver API VS 对话框模态:相同但不同

发布于2024-11-07
浏览:689

Popver API VS dialog Modal : Same Same but Different

我在阅读一些科技新闻博客时偶然发现标题 Popover API 登陆 Baseline。我很困惑,在我最近深入前端开发期间,我最近很难习惯在 HTML 中使用 Elements。在浏览博客时,我一直对到目前为止我如何使用该元素感到困惑。

长话短说

选择:

  • 需要用户焦点的模态弹出窗口
  • 辅助功能和键盘交互

选择弹出窗口:

  • 带灯光关闭的非模态弹出窗口
  • 用最少的代码轻松实现

元素

根据 MDN Dialog 元素

HTML 元素表示模式或非模式对话框或其他交互式组件,例如可忽略的警报、检查器或子窗口。

当网站需要引起用户对重要事物的注意时,通常会在内容上使用和显示 A。即订阅时事通讯、请求(更像是强制)禁用广告拦截器或接受条款和条件。

元素作为模态

由于您可能在多个网站上多次遇到过,其中一些弹出窗口将在整个屏幕上绘制,同时模糊背景或禁用背景并使用户仅将注意力集中在手头的任务上,用户必须关闭(仅在允许的情况下)弹出窗口或输入所需的信息以使其消失。这种行为称为“元素作为模态”。这些模态元素显示在页面的顶层。

//To open dialog as a modal.

dialog.showModal();

// To close the dialog.

dialog.close();
使用 showModal() 方法显示的

元素可以使用 esc 键关闭。键盘用户期望这种行为需要维护并由浏览器提供。如果打开了多个模式对话框,则只有最后一个对话框将使用 esc 键关闭。

作为非模态元素

您可能并不总是希望阻止用户使用您的网页的自然流程,停止执行其他所有操作并专注于您想要显示的内容,但仍然是您的内容,例如 toast 通知、cookie 同意或一般工具提示信息。应出现在页面的顶层,位于用户可以或不能交互的任何其他内容之上。这些类型的弹出窗口称为非模式弹出窗口。用户可以手动关闭它们,或者通常时间会自行消失。这些非模态对话框仍然显示在页面的顶层,但可以使用 z-index 控制它们的优先级,并且模态元素将采用比此更高的 z-index 并使其不可访问。

//To open dialog as a modal.

dialog.show();

// To close the dialog.

dialog.close();

代码示例

一些问题

我很难掌握非模态元素的工作和使用。根据我的说法,非模态元素的行为不一致,需要 Javascript 代码来处理以下情况:

  • 没有简单的解雇功能。单击模型外部不会关闭 .
  • esc 键不会关闭并且需要 Javascript 来处理该情况。
  • 如果你想在顶层绘制,需要手动管理z-index。

令我惊讶的是,popover API 回答或修复了这些问题以及更多......

弹出窗口API

popover 是可以添加到任何 HTML 属性的属性。这是一个例子。


Popover content

popover 和 元素之间的主要区别

popover 和

元素之间的主要区别是 popover 始终是非模态的。 元素带有一个 role=dialog 属性,该角色属性附加到各种 HTML 元素并以某种方式运行。即 h1 具有标题角色 a 具有锚/链接角色。此角色用于确定并帮助屏幕阅读器等辅助技术确定元素。但是,弹出框是 HTML 元素的一个属性,因为它没有附加默认角色。这有助于隐藏上面示例中的
,直到单击按钮为止。

popover 属性可以用最少的代码来使用,虽然它可以使用 Javascript 进行控制,但它并不像

那样始终需要。

popover 可以有 2 个特征:
1.popover=auto:具有轻解功能,无需JS交互。
2.popover=manual:需要Javascript交互,例如单击按钮或计时器来显式关闭它。

popover始终显示在顶层,无需显式设置z-index。

代码示例:

您可以看到我几乎不需要 Javascript 代码就可以实现相同的行为。设计和管理各种弹出窗口变得更加容易。

一些设计注意事项

popover 可以有:使用 CSS 设置的背景,可用于模糊或灰化 popover 的背景,但这不会消除它的光消除功能,并且如果 pop- ,用户仍然可以单击外部并与网页的其他元素进行交互。在确定何时选择 popover 而不是

.

时,您应该非常小心

这里要考虑的主要问题是:正在显示的组件是目前唯一应该获得焦点的东西吗?可以允许用户与其他东西交互吗?

结论

总之,该元素和弹出窗口 API 提供了在 Web 应用程序中创建交互式弹出窗口的多种选项。通过了解它们的独特特征和用例,您可以做出明智的决策,以增强用户体验并简化您的开发流程。

参考

  1. 比较 Popover API 和元素
  2. 对话框和弹出窗口看起来很相似。它们有何不同?
  3. Popover API 登陆 Baseline

版本声明 本文转载于:https://dev.to/decoders_lord/popver-api-vs-dialog-modal-same-same-but-different-2ig7?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • Python读取CSV文件UnicodeDecodeError终极解决方法
    Python读取CSV文件UnicodeDecodeError终极解决方法
    在试图使用已内置的CSV模块读取Python中时,CSV文件中的Unicode Decode Decode Decode Decode decode Error读取,您可能会遇到错误的错误:无法解码字节 在位置2-3中:截断\ uxxxxxxxx逃脱当CSV文件包含特殊字符或Unicode的路径逃...
    编程 发布于2025-04-15
  • 如何将PANDAS DataFrame列转换为DateTime格式并按日期过滤?
    如何将PANDAS DataFrame列转换为DateTime格式并按日期过滤?
    将pandas dataframe列转换为dateTime格式示例:使用column(mycol)包含以下格式的以下dataframe,以自定义格式:})指定的格式参数匹配给定的字符串格式。转换后,MyCol列现在将包含DateTime对象。 date oped filtering > = p...
    编程 发布于2025-04-15
  • 为什么我在Silverlight Linq查询中获得“无法找到查询模式的实现”错误?
    为什么我在Silverlight Linq查询中获得“无法找到查询模式的实现”错误?
    查询模式实现缺失:解决“无法找到”错误在银光应用程序中,尝试使用LINQ建立错误的数据库连接的尝试,无法找到以查询模式的实现。”当省略LINQ名称空间或查询类型缺少IEnumerable 实现时,通常会发生此错误。 解决问题来验证该类型的质量是至关重要的。在此特定实例中,tblpersoon可能需...
    编程 发布于2025-04-15
  • Java开发者如何保护数据库凭证免受反编译?
    Java开发者如何保护数据库凭证免受反编译?
    在java 在单独的配置文件保护数据库凭证的最有效方法中存储凭据是将它们存储在单独的配置文件中。该文件可以在运行时加载,从而使登录数据从编译的二进制文件中远离。使用prevereness class import java.util.prefs.preferences; 公共类示例{ 首选项...
    编程 发布于2025-04-15
  • 如何在无序集合中为元组实现通用哈希功能?
    如何在无序集合中为元组实现通用哈希功能?
    在未订购的集合中的元素要纠正此问题,一种方法是手动为特定元组类型定义哈希函数,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    编程 发布于2025-04-15
  • 如何克服PHP的功能重新定义限制?
    如何克服PHP的功能重新定义限制?
    克服PHP的函数重新定义限制在PHP中,多次定义一个相同名称的函数是一个no-no。尝试这样做,如提供的代码段所示,将导致可怕的“不能重新列出”错误。 但是,PHP工具腰带中有一个隐藏的宝石:runkit扩展。它使您能够灵活地重新定义函数。 runkit_function_renction_re...
    编程 发布于2025-04-15
  • `console.log`显示修改后对象值异常的原因
    `console.log`显示修改后对象值异常的原因
    foo = [{id:1},{id:2},{id:3},{id:4},{id:id:5},],]; console.log('foo1',foo,foo.length); foo.splice(2,1); console.log('foo2', foo, foo....
    编程 发布于2025-04-15
  • Go语言垃圾回收如何处理切片内存?
    Go语言垃圾回收如何处理切片内存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片时,了解垃圾收集行为至关重要,以避免潜在的内存泄...
    编程 发布于2025-04-15
  • 如何使用PHP从XML文件中有效地检索属性值?
    如何使用PHP从XML文件中有效地检索属性值?
    从php $xml = simplexml_load_file($file); foreach ($xml->Var[0]->attributes() as $attributeName => $attributeValue) { echo $attributeName,...
    编程 发布于2025-04-15
  • 如何从Google API中检索最新的jQuery库?
    如何从Google API中检索最新的jQuery库?
    从Google APIS 问题中提供的jQuery URL是版本1.2.6。对于检索最新版本,以前有一种使用特定版本编号的替代方法,它是使用以下语法:获取最新版本:未压缩)While these legacy URLs still remain in use, it is recommended ...
    编程 发布于2025-04-15
  • 如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解决方案: args)抛出异常{ 日历cal = calendar.getInstance(); SimpleDateFormat SDF =新的SimpleDateFormat(“...
    编程 发布于2025-04-15
  • 您如何在Laravel Blade模板中定义变量?
    您如何在Laravel Blade模板中定义变量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配变量对于存储以后使用的数据至关重要。在使用“ {{}}”分配变量的同时,它可能并不总是最优雅的解决方案。幸运的是,Blade通过@php Directive提供了更优雅的方法: $ old_section =“...
    编程 发布于2025-04-15
  • 如何在鼠标单击时编程选择DIV中的所有文本?
    如何在鼠标单击时编程选择DIV中的所有文本?
    在鼠标上选择div文本单击带有文本内容,用户如何使用单个鼠标单击单击div中的整个文本?这允许用户轻松拖放所选的文本或直接复制它。 在单个鼠标上单击的div元素中选择文本,您可以使用以下Javascript函数: function selecttext(canduterid){ if(do...
    编程 发布于2025-04-15
  • 哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    在Python Matplotlib's path.contains_points FunctionMatplotlib's path.contains_points function employs a path object to represent the polygon.它...
    编程 发布于2025-04-15
  • 如何使用Python理解有效地创建字典?
    如何使用Python理解有效地创建字典?
    在python中,词典综合提供了一种生成新词典的简洁方法。尽管它们与列表综合相似,但存在一些显着差异。与问题所暗示的不同,您无法为钥匙创建字典理解。您必须明确指定键和值。 For example:d = {n: n**2 for n in range(5)}This creates a dicti...
    编程 发布于2025-04-15

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3