{"id":201,"date":"2020-07-22T23:19:02","date_gmt":"2020-07-22T15:19:02","guid":{"rendered":"https:\/\/blog.indeex.club\/?p=201"},"modified":"2020-08-26T00:20:28","modified_gmt":"2020-08-25T16:20:28","slug":"%e7%bb%84%e4%bb%b6%e7%bc%96%e7%a8%8b%e4%b8%80","status":"publish","type":"post","link":"https:\/\/blog.indeex.club\/index.php\/2020\/07\/22\/%e7%bb%84%e4%bb%b6%e7%bc%96%e7%a8%8b%e4%b8%80\/","title":{"rendered":"\u7ec4\u4ef6\u7f16\u7a0b\u4e00"},"content":{"rendered":"<hr \/>\n<p>\u7528\u7684\u4e45\u4e86\u4e5f\u5c31\u5fd8\u4e86\u3002\u3002\u3002<\/p>\n<h3>\u81ea\u5b9a\u4e49\u6807\u7b7e<\/h3>\n<pre data-language=HTML><code class=\"language-markup line-numbers\">&lt;indeex-component&gt;&lt;\/indeex-component&gt;\n<\/code><\/pre>\n<pre><code class=\"language-javascript line-numbers\">class IndeexComponent extends HTMLElement {\n  connectedCallback() {\n    this.innerHTML = `&lt;h1&gt;Hello Indeex&lt;\/h1&gt;`;\n  }\n}\ncustomElements.define('indeex-component', IndeexComponent);\n<\/code><\/pre>\n<p>\u53ef\u4ee5\u5f88\u597d\u7684\u81ea\u7136\u8bed\u8a00\u5316\u3002<\/p>\n<h3>\u5d4c\u5957\u9694\u79bb\u6807\u7b7e<\/h3>\n<p>\u5d4c\u5957\u9694\u79bb\u6807\u7b7e\u7684\u5b98\u65b9\u540d\u79f0\u53eb\uff1a<strong>shadow tree<\/strong>\uff0c\u7c7b\u4f3c<strong>iframe<\/strong>\uff1a<\/p>\n<pre data-language=HTML><code class=\"language-markup line-numbers\">&lt;div&gt;\n  &lt;div id=\"indeex\"&gt;\n    &lt;#shadow-root&gt;\n      &lt;style&gt;\n      div {\n        background: sandybrown;\n        color: darkmagenta;\n        cursor: pointer;\n        margin: 3ch;\n      }\n      &lt;\/style&gt;\n      &lt;div id=\"btn\"&gt;wahaha&lt;\/div&gt;\n    &lt;\/#shadow-root&gt;\n  &lt;\/div&gt;\n  &lt;div id=\"btn\"&gt;whh&lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<pre><code class=\"language-javascript line-numbers\">const sr = document.getElementById('indeex').attachShadow({ mode: 'open' });\nsr.innerHTML = `&lt;style&gt;\ndiv {\n  color: blue;\n}\n&lt;\/style&gt;\n&lt;div id=\"btn\"&gt;slot&lt;slot&gt;&lt;\/slot&gt;&lt;\/div&gt;`;\n<\/code><\/pre>\n<p>\u548cVue\u7684<slot>\u7c7b\u4f3c<\/p>\n<h3>\u81ea\u5b9a\u4e49\u6a21\u677f<\/h3>\n<p>\u6a21\u677f\u7c7b\u4f3c\u6807\u7b7e\u7684\u7ec4\u5408\u7684\u6a21\u5b50\uff0c\u4e0b\u9762\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u6a21\u677f\uff1a<\/p>\n<pre data-language=HTML><code class=\"language-markup line-numbers\">&lt;template&gt;\n  &lt;h1&gt;Hello Indeex&lt;\/h1&gt;\n&lt;\/template&gt;\n<\/code><\/pre>\n<pre><code class=\"language-javascript line-numbers\">const template = document.querySelector('template');\nconst node = document.importNode(template.content, true);\ndocument.body.appendChild(node);\n<\/code><\/pre>\n<p><em>document.importNode<\/em>\u65b9\u6cd5\u7528\u4e8e\u521b\u5efa\u6a21\u677f\u7684\u5185\u5bb9\u526f\u672c\uff0c\u7b2c\u4e8c\u4e2a\u53c2\u6570\u8868\u793a\u9700\u8981\u6df1\u62f7\u8d1d\u3002<\/p>\n<p>\u4e5f\u53ef\u4ee5\u5728\u6a21\u677f\u91cc\u4f7f\u7528\u6837\u5f0f\u548c\u4ee3\u7801\uff0c\u7c7b\u4f3c\u4e00\u4e2a\u5d4c\u5957\u4e86\u4e00\u4e2a\u5355\u72ec\u7684\u9875\u9762\uff1a<\/p>\n<pre data-language=HTML><code class=\"language-markup line-numbers\">&lt;template id=\"template\"&gt;\n  &lt;script&gt;\n    const btn = document.getElementById('handleClick');\n    btn.addEventListener('click', e =&gt; console.log(e));\n  &lt;\/script&gt;\n  &lt;style&gt;\n    #handleClick {\n      all: unset;\n      background: navajowhite;\n      border: 0;\n      border-radius: 1ch;\n      color: white;\n      font-family: '\u6977\u4f53';\n      font-size: 5ch;\n      padding: 1ch 2ch;\n      margin: 1ch;\n      text-align: center;\n    }\n  &lt;\/style&gt;\n  &lt;button id=\"handleClick\"&gt;wahaha&lt;\/button&gt;\n&lt;\/template&gt;\n<\/code><\/pre>\n<pre><code class=\"language-javascript line-numbers\">const template = document.getElementById('template');\ndocument.body.appendChild(\n  document.importNode(template.content, true)\n);\n<\/code><\/pre>\n<p>\u4e0b\u9762\u662f\u5217\u8868\u7684\u4f8b\u5b50\uff1a<\/p>\n<pre data-language=HTML><code class=\"language-markup line-numbers\">&lt;style type=\"text\/css\"&gt;\n    li{\n        list-style: none;\n        background-color: #1E9BF9;\n        margin-top: 3ch;\n        padding: 2ch;\n        border-radius: 1ch;\n        color: #FAEBD7;\n        font-size: 4ch;\n    }\n    .title{\n        color: #008800;\n        font-size: 6ch;\n    }\n    .author{\n        color: #FFFDE8;\n        font-size: 5ch;\n    }\n&lt;\/style&gt;\n&lt;template id=\"book\"&gt;\n    &lt;li&gt;&lt;span class=\"title\"&gt;&lt;\/span&gt; &amp;mdash; &lt;span class=\"author\"&gt;&lt;\/span&gt;&lt;\/li&gt;\n&lt;\/template&gt;\n&lt;ul id=\"books\"&gt;&lt;\/ul&gt;\n<\/code><\/pre>\n<pre><code class=\"language-javascript line-numbers\">const fragment = document.getElementById('book');\nconst books = [{\n        title: '\u4e00\u672c\u4e66',\n        author: 'indeex hsi'\n    },\n    {\n        title: '\u4e24\u672c\u4e66',\n        author: 'indeex'\n    },\n    {\n        title: '\u4e09\u672c\u4e66',\n        author: 'qiary'\n    }\n];\n\nbooks.forEach(book =&gt; {\n    const instance = document.importNode(fragment.content, true);\n    instance.querySelector('.title').innerHTML = book.title;\n    instance.querySelector('.author').innerHTML = book.author;\n    document.getElementById('books').appendChild(instance);\n});\n<\/code><\/pre>\n<p>\u4e0b\u9762\u662f\u4e00\u4e2a\u5168\u5c4f\u6a21\u6001\u7a97\u53e3\u4f8b\u5b50\uff1a<\/p>\n<pre data-language=HTML><code class=\"language-markup line-numbers\">&lt;style type=\"text\/css\"&gt;\n    #modalBtn {\n      background: tomato;\n      border-radius: 2ch;\n      color: #fff;\n      padding: 5ch 3ch;\n      position: static;\n    }\n&lt;\/style&gt;\n&lt;template id=\"modalTemplate\"&gt;\n  &lt;script&gt;\n    document.getElementById('modalBtn').addEventListener('click', () =&gt; {\n      const wrapper = document.querySelector('.wrapper');\n      const closeButton = document.querySelector('button.close');\n      const wasFocused = document.activeElement;\n      wrapper.classList.add('open');\n      closeButton.focus();\n      closeButton.addEventListener('click', () =&gt; {\n        wrapper.classList.remove('open');\n        wasFocused.focus();\n      });\n    });\n  &lt;\/script&gt;\n  &lt;style&gt;\n    .wrapper {\n      opacity: 0;\n      transition: visibility 0s, opacity 0.25s ease-in;\n    }\n    .wrapper:not(.open) {\n      visibility: hidden;\n    }\n    .wrapper.open {\n      align-items: center;\n      display: flex;\n      justify-content: center;\n      height: 100vh;\n      position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n      opacity: 1;\n      visibility: visible;\n    }\n    .overlay {\n      background: rgba(0, 0, 0, 0.8);\n      height: 100%;\n      position: fixed;\n        top: 0;\n        right: 0;\n        bottom: 0;\n        left: 0;\n      width: 100%;\n    }\n    .dialog {\n      background: #ffffff;\n      max-width: 800px;\n      padding: 1rem;\n      position: fixed;\n      border-radius: 20px;\n    }\n    button {\n      all: unset;\n      cursor: pointer;\n      font-size: 1.25rem;\n      position: absolute;\n        top: 1rem;\n        right: 1rem;\n    }\n\n    button{\n        box-sizing: border-box;\n    }\n\n    button:focus{\n        border: none;\n    }\n    button:hover{\n        border: 1px solid #1E9BF9;\n    }\n  &lt;\/style&gt;\n  &lt;div class=\"wrapper\"&gt;\n  &lt;div class=\"overlay\"&gt;&lt;\/div&gt;\n    &lt;div class=\"dialog\" role=\"dialog\" aria-labelledby=\"title\" aria-describedby=\"content\"&gt;\n      &lt;button class=\"close\" aria-label=\"Close\"&gt;\u53c9\ufe0f&lt;\/button&gt;\n      &lt;h1 id=\"title\"&gt;Hello Indeex&lt;\/h1&gt;\n      &lt;div id=\"content\" class=\"content\"&gt;\n        &lt;p&gt;\u54c7\u54c8\u54c8\u7684\u6a21\u6001\u7a97&lt;\/p&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n\n&lt;button id=\"modalBtn\"&gt;\u5047\u88c5\u662f\u4e2a\u7f16\u8f91\u6309\u94ae&lt;\/button&gt;\n<\/code><\/pre>\n<pre><code class=\"language-javascript line-numbers\">const modalTemplate = document.getElementById('modalTemplate');\ndocument.body.appendChild(\n  document.importNode(modalTemplate.content, true)\n);\n<\/code><\/pre>\n<p>\u6a21\u677f\u5185\u53ef\u4ee5\u6709\u6837\u5f0f\u3001\u811a\u672c\uff0c\u6240\u4ee5\u4e00\u4e2a\u6a21\u677f\u53ef\u4ee5\u50cf\u7c7b\u4e00\u6837\u62e5\u6709\u81ea\u5df1\u7684\u5c5e\u6027\u548c\u65b9\u6cd5\u3002<\/p>\n<p>\u5148\u8fd9\u6837\u5427\u3002\u3002<\/p>\n<p>code enjoy!\ud83d\ude1c\ud83d\ude1c\ud83d\ude1c<\/p>\n<p>\u4f5c\u8005\uff1aindeex<\/p>\n<p>\u94fe\u63a5\uff1a<a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/indeex.club\/\">https:\/\/indeex.club<\/a><\/p>\n<p>\u8457\u4f5c\u6743\u5f52\u4f5c\u8005\u6240\u6709\u3002\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u8054\u7cfb\u4f5c\u8005\u83b7\u5f97\u6388\u6743\uff0c\u975e\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u51fa\u5904\u3002<\/p>\n<hr \/>\n","protected":false},"excerpt":{"rendered":"<p>\u7528\u7684\u4e45\u4e86\u4e5f\u5c31\u5fd8\u4e86\u3002\u3002\u3002 \u81ea\u5b9a\u4e49\u6807\u7b7e &lt;indeex-component&gt;&lt;\/ind<a href=\"https:\/\/blog.indeex.club\/index.php\/2020\/07\/22\/%e7%bb%84%e4%bb%b6%e7%bc%96%e7%a8%8b%e4%b8%80\/\" class=\"read-more\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[4],"_links":{"self":[{"href":"https:\/\/blog.indeex.club\/index.php\/wp-json\/wp\/v2\/posts\/201"}],"collection":[{"href":"https:\/\/blog.indeex.club\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.indeex.club\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.indeex.club\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.indeex.club\/index.php\/wp-json\/wp\/v2\/comments?post=201"}],"version-history":[{"count":1,"href":"https:\/\/blog.indeex.club\/index.php\/wp-json\/wp\/v2\/posts\/201\/revisions"}],"predecessor-version":[{"id":202,"href":"https:\/\/blog.indeex.club\/index.php\/wp-json\/wp\/v2\/posts\/201\/revisions\/202"}],"wp:attachment":[{"href":"https:\/\/blog.indeex.club\/index.php\/wp-json\/wp\/v2\/media?parent=201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.indeex.club\/index.php\/wp-json\/wp\/v2\/categories?post=201"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.indeex.club\/index.php\/wp-json\/wp\/v2\/tags?post=201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}