侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

webComponent初体验

2024-05-09 星期四 / 0 评论 / 0 点赞 / 96 阅读 / 4343 字

这两天在优化环球网首页的加载速度,为了减少DOM的加载时间,我才用了webComponent的方式去分解了DOM。 简单记载下吧~ 有过angularjs开发经验的哥们,对于webComponent的

这两天在优化环球网首页的加载速度,为了减少DOM的加载时间,我才用了webComponent的方式去分解了DOM。
简单记载下吧~

有过angularjs开发经验的哥们,对于webComponent的初体验应该都和我差不多吧,这尼玛简直就是指令好不~
其实我到现在也是有这个感觉的~

言归正传,WebComponent通过一个标准化的非侵入的方式封装了一个组件,每个组件都能够组织好它自身的html结构,css样式以及ajvascript的代码,并且不受外界的影响。

其实这是非常不得了的事情,这就意味着组件化,模块化开发非常非常的犀利了有木有

说到web Component,shadow DOM也必须说下。
开发者通过shadow DOM在文档流中创建了一些完全独立于其他元素的子DOM树。由于这个特性,使我们可以封装一些具有独立功能的组件,并且可以保证不会在无意中干扰到别的DOM。shadow DOM和标准的DOM一样,可以设置它的样式,也可以用javascript来操作他的行为。主文档和基于shadow DOM创建的独立组件之间互不干扰。所以组件的复用变得异常的简单!

对于别的这些东西就不多说了,直接上代码吧,直观点

<template>    <style type="text/css">        p{            margin-top: 2em;        }        .coloured{            background-color: blue;        }    </style>    <p>my name is <strong class="coloured">Neal</strong></p></template><script type="text/javascript">    (function () {        // 创建一个基于html元素原形的html对象        var element = Object.create(HTMLElement.prototype);        // 获取template的内容        var template = document.currentScript.ownerDocument.querySelector('template').content;        //定义元素被创建时候的回调        element.createdCallback = function() {            // 创建 shadow root            var shadowRoot = this.createShadowRoot();            // 添加一个template的clone加入shadowRoot            var clone = document.importNode(template, true);            shadowRoot.appendChild(clone);        };        document.registerElement('neal-yang', {            prototype: element        });    })();</script>


而在index页面中我们需要引入这个template页面,然后在 html中直接用就可以了

<!DOCTYPE html><html><head>    <meta charset="utf-8">    <title>css components</title>    <link href="components/templateTest.html" rel="import">    <script src='components/webcomponents.min.js'></script>    <style type="text/css">        body{            padding: 4em;        }    </style></head><body></body><script type="text/javascript">    var body = document.body;    body.appendChild(document.createElement('neal-yang'));</script></html>

注意我这里还引入了webcomponent.js的插件,是为了解决浏览器兼容性的问题的。
还有这个页面的打开需要个服务器打开,不然会有CORS错误。

广告 广告

评论区