Web Components 实战:如何打造自己的表情包组件库?

前言

自从 Web 组件成为 W3C 标准以来,前端开发者便能够使用这一技术构建可复用、可组合以及可扩展的 Web 应用程序,轻松地实现组件化开发的目标。在本文中,我们将向您展示如何利用 Web 组件技术打造一个简单的表情包组件库,为您提供一个深度而有趣的练习机会。

Web 组件入门

Web 组件是由三个主要规范组成的:

  1. Custom Elements - 允许开发者创建自定义元素,定义其行为和样式。
  2. Shadow DOM - 允许开发者将隐藏的 DOM 树附加到元素,提供更好的封装和保护。
  3. HTML Templates - 允许开发者定义可复用的模板,以避免在 JavaScript 中写大量的 HTML 代码。

在这里,我们不会深入讨论这些规范的细节,但是如果您对此感兴趣的话,可以查看阮一峰的 《ES6标准入门》 一书,其中有相关的深度讲解。

实现过程

创建自定义元素

首先,我们需要创建一个自定义元素来显示我们的表情包。我们可以通过继承基本 HTMLElement 类或实现其接口来创建自定义元素。这里我们使用了继承:

----- ----- ------- ----------- -
  ------------- -
    --------
  -
-

添加模板

现在,我们需要添加一个模板,用于在 Custom Elements 中渲染我们的表情包。在本例中,我们创建一个简单的模板:

--------- --------------------
  ---- --------------
    ---- ------ -------
    -------------
  ------
-----------

向 Shadow DOM 添加模板内容

接下来,我们需要将模板的内容添加到 Shadow DOM 中。我们可以通过 this.attachShadow() 方法创建 Shadow DOM,并使用 importNode() 方法导入已经存在的模板内容:

------------------- -
  ----- ---------- - ------------------- ----- ------ ---
  ----- -------- - ------------------------------------------
  ----- -------- - ---------------------------------
  ---------------------------------
-

我们可以通过将 Emoji 元素附加到页面中来激活 connectedCallback() 方法:

---------------

添加 CSS 样式

现在,我们已经将模板内容添加到 Shadow DOM 中,但他们缺乏样式。我们可以使用 CSS 进行样式化。这里我们创建了一个简单的样式,为表情包添加了一些边框,以及使其垂直居中的样式:

------ -
  -------- -----
  --------------- -------
  ---------------- -------
  ------------ -------
  ------- -----
  -------- -----
  -------------- ----
  ------- --- ----- -----
  ------ ------
  ------- ------
-

------ --- -
  ------ -----
  ------- -----
  -------- -----
  -------------- ----
  -------- ------
-

添加功能

现在,我们已经创建了一个非常简单的表情包组件。我们要添加的功能包括:

  1. 设置表情包的图像和标题。
  2. 点击表情包时,在控制台中打印出表情包的标题和图像 URL。

首先,我们需要定义一个表示表情包标题和图像的属性,然后向标记添加其对应的 HTML 属性:

----- ----- ------- ----------- -
  ------------- -
    --------
  -

  ------ --- -------------------- -
    ------ --------- -------------
  -

  ------------------------------ --------- --------- -
    ------ ------ -
      ---- --------
        ------------------------------------------------- - ---------
        ------
      ---- ------------
        -------------------------------------------------------- ----------
        ------
    -
  -
-

------------------------------ -------
------ -------------- ----- ---------------------------------------------------------------------------------------------
--------

现在,我们可以展示图像和标题,接下来我们需要添加具有打印标题和图像 URL 的 click 事件:

------------- -
  --------
  ------------ - ------------------------
-

------------------- -
  -- ---
  ----------------------------------------------------------------- --------------
-

---------------------- -
  -------------------------------------------------------------------- --------------
-

--------- -
  ------------------- ------------------------------ ---------- ------------------------------------
-

创建自定义元素集合

现在我们已经创建了一个单独的表情包组件,但这种方式可能不够灵活。如果想要显示 10 个表情,这样写 10 次 HTML 不是我们想要的,我们可以考虑创建一个集合来批量将表情包放到页面上。

----- --------------- ------- ----------- -
  ------------- -
    --------
  -

  ------------------- -
    ------------------------------------------ ------ --------------------------------------------------------------------------------------------
    ------------------------------------------ ------ --------------------------------------------------------------------------------------------
    -- ---
  -

  ------------------ --------- -
    ----- ----- - --------------------------------
    --------------------------- -------
    ------------------------------- ----------
    ------ ------
  -
-

----------------------------------------- -----------------
-------------------------------------

完整示例代码

最终的 EmojiEmojiCollection 类代码如下所示:

----- ----- ------- ----------- -
  ------------- -
    --------
    ------------ - ------------------------
  -

  ------ --- -------------------- -
    ------ --------- -------------
  -

  ------------------------------ --------- --------- -
    ------ ------ -
      ---- --------
        ------------------------------------------------- - ---------
        ------
      ---- ------------
        -------------------------------------------------------- ----------
        ------
    -
  -

  ------------------- -
    ----- ---------- - ------------------- ----- ------ ---
    ----- -------- - ------------------------------------------
    ----- -------- - ---------------------------------
    ---------------------------------

    ----------------------------------------------------------------- --------------
  -

  ---------------------- -
    -------------------------------------------------------------------- --------------
  -

  --------- -
    ------------------- ------------------------------ ---------- ------------------------------------
  -
-

----- --------------- ------- ----------- -
  ------------- -
    --------
  -

  ------------------- -
    ------------------------------------------ ------ --------------------------------------------------------------------------------------------
    ------------------------------------------ ------ --------------------------------------------------------------------------------------------
    -- ---
  -

  ------------------ --------- -
    ----- ----- - --------------------------------
    --------------------------- -------
    ------------------------------- ----------
    ------ ------
  -
-

------------------------------ -------
----------------------------------------- -----------------

总结

在本文中,我们使用 Web 组件技术创建了一个简单的表情包组件库,并向您展示了如何使用 Custom Elements 进行组件化编程。这种方法已被广泛使用,并成为现代 Web 开发的重要概念之一。希望这篇文章能为您带来一些启示,鼓励您深入学习 Web 组件及其相关技术,并在您的项目中合理应用。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/664db68fd3423812e4d4475e