基于 Custom Elements 实现 toast 提示框的技巧及优化

前言

在前端开发中,我们常常需要使用到提示框。提示框可以起到提醒用户、提示操作结果等作用,是一个非常常用的组件。本文将介绍如何基于 Custom Elements 实现一个简单的 toast 提示框,并通过优化提高其性能。

Custom Elements 简介

Custom Elements 是一项 Web Component 标准,允许开发者创建自定义的 HTML 元素,可以扩展功能、改善可维护性和实现代码重用。

Custom Elements API 主要包含两个重要的接口:

  • customElements.define():用于定义一个自定义的 HTML 元素。
  • HTMLElement: 自定义元素继承该接口,从而可以在 HTML 代码中使用。

实现 toast 提示框

下面我们就来使用 Custom Elements 实现一个简单的 toast 提示框。

HTML 骨架

首先,我们需要添加 HTML 骨架,定义一个 toast-message 元素。

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

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

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

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

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

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

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

在这个骨架中,我们定义了一个 template 标签,里面嵌套了 CSS 样式和插槽(slot)。在 JavaScript 中,我们继承了 HTMLElement 接口,并在 constructor 中获取模板的内容,并将其挂载到 shadow DOM 中。然后在 connectedCallback 中,我们默认隐藏 toast-message 元素。为了方便使用,我们为 ToastMessage 添加了两个方法:showhide,分别用于显示和隐藏 toast-message 元素。

使用示例

我们可以将 toast-message 元素放到任何需要的位置,并在需要的时候调用其 show 方法。

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

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

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

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

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

在这个示例中,我们在 button 的点击事件中,创建了一个 toast-message 元素并添加到 app 容器中。然后调用其 show 方法,显示 Hello World! 消息。在 3 秒后,调用其 hide 方法,隐藏 toast-message 元素。

优化

虽然通过 Custom Elements 实现 toast 提示框比传统的方式更加直观、容易理解,但是其性能并不是最优的。我们需要对其进行优化,以提高性能和用户体验。

尽量减少扩展作用域

在 Custom Elements 中,每一个元素都会创建独立的作用域。因此,为了减少扩展作用域所带来的性能开销,我们应该尽量减少使用类方法来绑定事件等操作,同时也要避免使用闭包。

使用事件委托

由于每个 toast-message 元素都是独立的,因此为每个元素绑定事件可能会带来更大的开销。为避免这种情况,我们可以使用事件委托。将事件绑定在父容器上,通过事件对象的 target 属性来判断触发事件的元素。

使用懒加载

在使用 Custom Elements 时,由于每个自定义元素都会创建一个独立的作用域,因此页面中使用的元素越多,加载所需的时间也就越长。为了避免这个问题,我们可以将元素进行懒加载。只有在需要使用时才会加载,从而加快页面的加载速度。

总结

本文介绍了如何使用 Custom Elements 实现一个简单的 toast 提示框,并通过优化提高了其性能。Custom Elements 是一个非常强大的 Web Component 技术,有助于提高代码的可维护性和可重用性。在实际开发中,我们可以根据需求进行灵活使用。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/649d63d148841e9894a2709c


猜你喜欢

  • SASS 中的变量命名规则与使用习惯

    介绍 为了减少 CSS 繁琐的重复定义和提高代码的可复用性,前端开发人员会使用 CSS 预处理器来处理样式表。其中,SASS 是最受欢迎的一种预处理器之一,它提供了多种功能,包括嵌套规则、变量、混合、...

    1 年前
  • 解决 Hapi 框架中的错误:TypeError: Strinfigied secret must be a buffer

    在使用 Hapi 框架构建 web 应用程序时,有时可能会遇到如下错误: ---------- ----------- ------ ---- -- - ------这个错误通常发生在使用 hapi-...

    1 年前
  • 初学者入门 Docker:从安装到应用实践

    Docker 是一种以容器化技术为基础的应用程序开发和部署工具,可帮助开发人员轻松解决底层环境配置问题,实现应用程序的快速部署和交付。本文将详细介绍 Docker 的入门使用,包括 Docker 的安...

    1 年前
  • RESTful API 如何处理 Json 格式的数据

    RESTful API 如何处理 Json 格式的数据 在 Web 开发中,RESTful 架构风格的 API 已经成为了一个非常重要的组成部分。而在 RESTful API 中,Json 格式的数据...

    1 年前
  • Vue.js 中如何使用 v-model 实现表单双向绑定(附代码实例)

    Vue.js 是一个逐渐成为 Web 开发领域中的主流框架之一,其中 v-model 是 Vue.js 提供的一个重要功能之一,它可以帮助我们实现表单双向绑定,从而方便地管理用户输入的数据。

    1 年前
  • 基于 Koa2 + Vue.js 的前后端分离开发实战

    本文将介绍如何使用 Koa2 和 Vue.js 进行前后端分离开发,并演示如何使用这些技术文件一个 web 应用程序。 什么是前后端分离? 前后端分离是一种架构风格,前端和后端的代码彼此独立,前端只需...

    1 年前
  • 如何使用 GraphQL 获得更好的 API 性能

    GraphQL 是一种新型的 API 查询语言和运行时环境,可以大幅提升前端应用的性能和开发效率。与传统的 RESTful API 相比,GraphQL 具有更好的可维护性和灵活性,可以根据客户端请求...

    1 年前
  • Angular 8.x 实现 httpClient 加 token 认证和登出操作完整教程

    在前后端分离的架构中,前端和后端之间进行交互需要使用HTTP协议。而HTTP是无状态的,这就需要使用Token来保证请求的安全性。本文将介绍如何在Angular 8.x中实现httpClient加to...

    1 年前
  • JavaScript Server-Sent实时事件的简单实现

    什么是Server-Sent事件 Server-Sent事件(简称SSE)是一种服务器端向客户端推送事件的标准化协议。SSE是基于HTTP协议的,使用简单而且易于实现。

    1 年前
  • 前端开发中的对比——纯异步与异步

    随着前端技术的不断发展,异步编程成为前端开发者必须掌握的技能之一。而在异步编程中,又可以分为纯异步和异步两种方式。本文将从相同点出发,详细分析这两种方式的特点和适用场景,并给出示例代码进行分析。

    1 年前
  • 在分布式环境下提高应用性能的技巧

    在分布式环境下提高应用性能的技巧 随着云计算、物联网等技术的快速发展,越来越多的应用需要在分布式环境下运行,而在这样的场景下,如何提高应用性能是一个非常重要的问题。

    1 年前
  • CSS Flexbox 实现瀑布流布局的应用实践建议

    瀑布流布局是现代网页设计中常见的一种布局方式。它让页面的内容像瀑布一样自然地流动,展示出更好的视觉效果。在前端开发领域,瀑布流布局使用 CSS Flexbox 技术实现是一种流行的方式。

    1 年前
  • Mocha + Selenium + WebdriverIO 实现自动化 UI 测试入门详解

    前言 前端开发时需要进行测试工作,其中UI测试是必须的,通过自动化UI测试可以提高测试效率,并且减少手动测试的错误,同时也可以保证网站的稳定性。在本文中,我们将介绍使用Mocha + Selenium...

    1 年前
  • Angular 中 RxJS 的操作符 mergeMap 的详细使用方法介绍

    前言 在 Angular 开发中,使用 RxJS 是非常普遍的。RxJS 是一种基于 observables 的响应式编程库,它使异步编程更加容易。RxJS 中有许多操作符,其中 mergeMap 是...

    1 年前
  • node.js 监控:pm2-monit 好用吗?

    在开发和部署 node.js 应用程序中,运行时错误和性能瓶颈是我们面临的两个主要挑战。日志系统是解决前者的一种方式,而了解应用程序的性能瓶颈则需要一些额外的工具。

    1 年前
  • Next.js 项目的代码分割实践

    什么是代码分割 代码分割指的是在构建时将 JavaScript 代码分割成更小的代码块以实现更快的加载和优化应用程序性能的技术。这意味着将代码划分为多个部分,以确保仅在需要的情况下加载代码。

    1 年前
  • 从输出文件大小看 webpack4 的优化机制

    前言 Webpack 作为前端开发中常用的模块打包工具, 在众多开发者和团队中得到了广泛的应用和普及。在 Webpack 4 的升级中,其性能和优化机制也得到了极大的提升和改进。

    1 年前
  • 如何使用 ESLint 来检查您的 TypeScript 项目中的错误和警告

    引言 在编写 TypeScript 代码时,可能会出现一些语法错误或潜在的问题,如未声明的变量、未使用的变量、未定义的类型、不安全的类型操作等。这些问题可能会导致程序的未定义行为、运行错误以及调试困难...

    1 年前
  • PWA 应用中的推送通知机制解析

    如果您是一名前端开发人员,您很可能已经听说过 PWA 应用。PWA 应用是一个让您可以在您的网站上使用诸如离线缓存、本地存储和推送通知等功能的应用。这些功能使我们的站点可以像本地应用程序一样运行,并为...

    1 年前
  • 使用 Express.js 告别 Node.js 多次回调烦恼

    在 Node.js 中,开发者经常会遇到一个问题,那就是多次回调的烦恼。比如,在处理 HTTP 请求时,开发者需要处理请求的参数、鉴权、业务逻辑等多个步骤。如果使用 Node.js 的原生 API 来...

    1 年前

相关推荐

    暂无文章