题记
As a web freshman, we having to make do with a long, nested batch of elements that together provide a custom page feature. however, some of frame often to ues custom elements and looks so cool or 逼格(how translate it ??),so, questing begging, how could we use the custom element and achieve it ??
MDN Official Documents just having some of unclear, so let's Simple and clear it!!
核心函数 customElements.define
在MDN官方文档中,如果你想要使用自定义标签,可以使用customElement类中define方法(IE浏览器默默离开...),
使用:customElements.define('myselfTagName', myselfClass, extendsObj);参数:myselfTagName: 自定义标签的名字 myselfClass: 自定义标签的类对象,(主要功能在这里实现,一般在自定义标签绑定变量、事件、指令或者是渲染条件) extendsObj: 内置并继承的元素(包裹着自定义标签的对象,一般不使用,毕竟谁会闲的无聊把基本标签封装成自定义标签然后填充一堆属性,语义化也说不通啊)
核心函数 attachShadow
官方文档对于解释很模糊,简单的说就是DOM的'一体双魂',拥有同样的函数和方法,但是Shadow DOM比被附加DOM更多的功能,前者具有独自的作用域,并且与外界DOM分隔。(这个作用就是shadow DOM的核心功能,它可以使你编写的DOM与css与其他区域互不影响,相当于vue中css样式<style scoped> </style>的作用);
shadow DOM弥补了customElements缺少隔离作用域(DOM和css作用域)的缺陷。shadom DOM Root的创建方法: this.attachShadow({mode: 'open'});
this: shadom DOM对象 mode: 开启js调用shadow DOM
代码示范
coding.... 莫道征途路漫漫Pop-up info box — web components Pop-up info widget - web components
思考
自定义标签的使用减少了我们频繁编写一堆冗余、深层嵌套的代码,提高了速率。然而,如果我们看页面源码会发现customElements.define不会消除自定义标签,自定义标签如果绑定了大量的数据、事件、敏感信息,页面上又完全显示出来,这就增加前端页面的不安全性。如何保证开发者即使用自定义标签又不会编译自定义标签从而导致DOM的过度挂载和数据的泄漏(总不能remove自定义标签吧,频繁操作DOM是不建议的),值得思考...