首页 >web前端 >js教程 >如何从头开始构建简单的 Web 组件

如何从头开始构建简单的 Web 组件

Barbara Streisand
Barbara Streisand原创
2025-01-23 01:00:14809浏览

本指南演示了构建可重用的 Web 组件:一个简单的计数器。 我们将利用自定义元素、Shadow DOM 和 HTML 模板。完成的计数器将具有用于增加和减少显示数值的按钮。

How to Build a Simple Web Component from Scratch

此代码的完整、可运行版本可以在此处

先决条件:

熟悉基本的 JavaScript 和对 DOM(文档对象模型)的概念性理解会很有帮助,尽管不是严格要求。

项目设置:

创建两个文件:counter.html(包含页面结构)和 counter.js(包含自定义元素定义)。

counter.html(初始结构):

<code class="language-html"><!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width">
  <title>Counter Component</title>
</head>
<body>
  <script src="counter.js"></script>
</body>
</html></code>

创建模板(counter.html - 添加模板):

我们将使用 HTML 模板定义计数器的视觉结构:

<code class="language-html"><template id="x-counter">
  <button id="min-btn">-</button>
  <span id="counter-display">0</span>
  <button id="plus-btn">+</button>
</template></code>

该模板不会直接渲染;它充当我们自定义元素的蓝图。

定义自定义元素 (counter.js):

这段 JavaScript 代码定义了计数器的功能:

<code class="language-javascript">class XCounter extends HTMLElement {
  constructor() {
    super();
    this.counter = 0;
    this.elements = {};
  }

  connectedCallback() {
    const template = document.getElementById("x-counter");
    this.attachShadow({ mode: "open" });
    this.shadowRoot.appendChild(template.content.cloneNode(true));
    this.elements = {
      plusBtn: this.shadowRoot.querySelector("#plus-btn"),
      minBtn: this.shadowRoot.querySelector("#min-btn"),
      counterDisplay: this.shadowRoot.querySelector("#counter-display")
    };
    this.displayCount();
    this.elements.plusBtn.onclick = () => this.increment();
    this.elements.minBtn.onclick = () => this.decrement();
  }

  increment() {
    this.counter++;
    this.displayCount();
  }

  decrement() {
    this.counter--;
    this.displayCount();
  }

  displayCount() {
    this.elements.counterDisplay.textContent = this.counter;
  }
}

customElements.define("x-counter", XCounter);</code>

这个类扩展了HTMLElementconnectedCallback 处理元素添加到页面时的设置,包括附加影子 DOM 和事件监听器。 incrementdecrementdisplayCount 管理计数器的值和显示。

使用计数器组件(counter.html - 添加自定义元素):

要使用计数器,只需将 <x-counter></x-counter> 添加到您的 HTML 中即可。

设置组件样式(counter.js - 添加样式):

使用 adoptedStyleSheets 将样式封装在组件内:

<code class="language-javascript">connectedCallback() {
  // ... (previous code) ...
  const sheet = new CSSStyleSheet();
  sheet.replaceSync(this.styles());
  this.shadowRoot.adoptedStyleSheets = [sheet];
  // ... (rest of connectedCallback) ...
}

styles() {
  return `
    :host {
      display: block;
      border: dotted 3px #333;
      width: fit-content;
      height: fit-content;
      padding: 15px;
    }
    button {
      border: solid 1px #333;
      padding: 10px;
      min-width: 35px;
      background: #333;
      color: #fff;
      cursor: pointer;
    }
    button:hover {
      background: #222;
    }
    span {
      display: inline-block;
      padding: 10px;
      width: 50px;
      text-align: center;
    }
  `;
}</code>

这添加了包含在影子 DOM 中的基本样式。

结论:

本教程演示了创建一个简单的、可重用的 Web 组件。 模板、shadow DOM 和自定义元素的使用促进了 Web 开发的模块化和可维护性。请记住将 [here](https://www.php.cn/link/2eac42424d12436bdd6a5b8a88480cc3) 替换为最终代码的实际链接。

以上是如何从头开始构建简单的 Web 组件的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn