npm 包 @npm-polymer/iron-overlay-behavior 使用教程

阅读时长 10 分钟读完

简介

@npm-polymer/iron-overlay-behavior 是一个 Polymer 元素基础行为包,它提供了弹出框、模态框以及工具提示等常见的浮层组件的基础行为实现,使开发者可以方便地构建和自定义这些组件。

此文章将从安装和基础使用入手,深入介绍如何使用 @npm-polymer/iron-overlay-behavior 开发常见的浮层组件,并提供实例代码以便读者更好地学习和掌握。

安装和基础使用

安装

您可以通过 npm 安装 @npm-polymer/iron-overlay-behavior 包:

安装完成后,可以将组件引入到您的 Polymer 元素中进行使用。在 Polymer 3 中,您可以使用以下代码进行元素导入:

基础使用

@npm-polymer/iron-overlay-behavior 主要提供了以下五种组件的行为:iron-overlay, iron-dropdown, iron-dialog, iron-toastiron-tooltip,它们都可以很方便地使用这个行为实现。

这里以 iron-dialog 为例,假设你已经安装了 @npm-polymer/iron-overlay-behavior 包。下面的代码演示了如何使用 iron-dialog 组件:

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

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

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

上述代码中,我们在 MyElement 中使用了 IronOverlayBehavior,然后在 template 中使用 iron-dialog 元素,通过 opened 属性来控制弹出框的显示与隐藏,通过 slot="buttons" 实现了底部按钮的布局,并通过 _toggleDialog_closeDialog 两个方法来处理打开和关闭弹出框的逻辑。

组件 API

使用 @npm-polymer/iron-overlay-behavior 还可以通过它所提供的一些 API 来实现对组件进行自定义。

下面是一部分 IronOverlayBehavior 支持的 API:

1. attach

attach 用于将浮层组件插入到指定元素中。例如:

将会将组件插入到 someElement 中。

2. notifyResize

notifyResize 用于通知组件以响应布局变化,例如浏览器窗口大小变化事件等。当浮层组件的位置或大小发生变化时,应该调用该方法重新计算布局:

3. render

render 用于重新渲染组件,该方法主要用于在不更改组件状态的情况下重绘组件,例如更新了组件的样式或使用 JavaScript 更新元素内容:

自定义浮层组件

除了基础组件外,我们可以通过 @npm-polymer/iron-overlay-behavior 提供的行为对浮层组件进行定制。

以下是一个完整的自定义弹出框组件的示例:

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

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

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

在上述示例中,MyDialog 实现了一个简单的弹出框组件。它继承了 IronOverlayBehavior 行为,使用了 overlay 样式布局,在 template 代码中定义了组件的结构和样式。通过 properties 定义了组件的属性,包括弹出框的标题、是否带有背景模态层、是否取消和确认等。通过 _overlayStatusChanged 方法来处理状态改变后的逻辑,通过 ready 方法来监听在组件上调用 iron-overlay-behavior 所触发的 iron-overlay-canceled 事件,最后通过 _handleCancel_handleConfirm 方法分别处理取消和确认操作。

浮层组件属性

浮层组件同时也支持了 Polymer 基本属性的继承:

  • opened: 是否打开浮层。
  • disabled: 是否禁用浮层的打开功能。
  • no-overlap: 是否在浮层和触发器的交叉区域停止布局时覆盖,而不是移动浮层到更合适的地方。
  • no-auto-focus: 是否在打开浮层时自动设置焦点。
  • no-cancel-on-outside-click: 是否关闭浮层的打开状态,并且应该在外部单击事件时处理关闭。
  • no-cancel-on-esc-key: 是否关闭浮层的打开状态,并应该在按下 Esc 键时处理关闭。

总结

本篇文章介绍了 @npm-polymer/iron-overlay-behavior 的用法和常见 API,也提供了一个自定义浮层组件的示例作为参考。希望这篇文章对您学习和使用前端浮层组件有所帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055ff281e8991b448ddb3d

纠错
反馈