探秘冷门的HTML5原生组件:Dialog

前言

很多做前端开发的朋友偶尔会跟我抱怨:前端技术可谓日新月异,平时需要花大量的时间去学习更新知识库,也难以保证不会落伍。追求最新的前端开发技术,就好像追“芝诺的乌龟”一样,无论多努力,我们永远是落后的一方。

是的,我也不得不承认前端技术大神制轮子的速度永远领先于我们。那又何妨,难倒没有最新的技术加持,我们以前开发的系统就会崩塌吗?事实上,这种情况并不会发生,反而盲目追求新技术对系统造成的不确定性才是最致命的。

我认为,原生的低级的技术才是最稳定,最可靠的。所以,今天我们暂且抛却所有新生代技术,回归原生HTML5,探究一下还有什么冷知识,是我们之前不曾涉足的。比如,我们下面即将开始研究的这个组件。

模态对话框组件

假设您的项目有个需求,写一个模态对话框,首先你会想到用什么技术来实现?

  • 用JQuery的插件?用Css自己做一个浮动Div层?

其实,以上的都不需要。因为原生的HTML其实是自带Dialog组件的。而且它还是在Top Layer上渲染的,这意味着我们不需要设置z-index属性,就能保证对话框在最顶层。

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dialog Example</title>
<style>
  dialog {
    width: 500px;
    padding: 10px;
    border: solid 1px #000;
    border-radius: 10px;
    background-color: #fff;
  }
</style>
</head>
<body>
  <button id="open-btn">Open Dialog</button>
  <p id="message"></p>
  <dialog id="my-dialog">
      <h3>This is a Model Dialog.</h3>
      <button id="confirm-btn">Confirm</button>
      <button id="cancel-btn">Cancel</button>
  </dialog>
</body>
</html>
<script>
  const dialog = document.getElementById('my-dialog');
  const message = document.getElementById('message');
  document.getElementById('open-btn').onclick = function() {
      dialog.showModal(); 
  };

  dialog.addEventListener('close',function(e){
    console.log(e);
  });

  dialog.querySelector("#confirm-btn").onclick = function(){
    dialog.close();
    message.innerText = "Confirm Button is Clicked."
  }

  dialog.querySelector("#cancel-btn").onclick = function(){
    dialog.close();
    message.innerText = "Close Button is Clicked."
  }
</script>

运行效果

dialog效果

点一下按钮,一个简单质朴的模态对话窗马上就出现在我们眼前。如果想美化一下,拿CSS往上堆就好了。我就懒得弄啦~

如果还想了解更多,请参考官方文档:

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog

总结

  • 原生HTML库中,有很多现成的非常好用组件,是被我们前端开发所忽略的;
  • 原生组件使用起来非常简洁方便;
  • 强烈推荐给跟我一样有代码洁癖的朋友,尽量避开框架拥抱原生。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • DTD 介绍 DTD(Document Type Definition 文档类型定义)是一组机器可读的规则,它们定...
    lio_zero阅读 3,068评论 0 9
  • 确定API 要确保你的API和同行的API没有太大不同,否则用户学习成本变高,不利于我们的UI使用;所以我们就可以...
    darkTi阅读 429评论 0 0
  • W3C https://zh.wikipedia.org/zh-hant/%E4%B8%87%E7%BB%B4%E...
    金冥灭阅读 418评论 0 0
  • 具名插槽 子组件使用 声明具名插槽,在使用组件时在组件标签内通过 v-slot:xxx来匹配响应插槽。 Tele...
    kuangdangLi阅读 59评论 0 0
  • 读完此文你将系统了解原生web组件组成以及它们之间的相互作用,并且对日常开发中遇到的问题会有更深层次的理解。 We...
    xurna阅读 842评论 0 0

友情链接更多精彩内容