Toast

Toast 通过屏幕上的消息提供有关操作的简要反馈。

Toast 应用程序方法

让我们来看看相关的应用程序方法来使用 Toast

app.toast.create(parameters)- 创建 Toast 实例

  • parameters - 对象。带有 toast 参数的对象

该方法返回已创建的 Toast 实例

app.toast.destroy(el)- 销毁 Toast 实例

  • el - HTMLElementstring(带有 CSS 选择器)或 object。要销毁的 Toast 元素或 Toast 实例。

app.toast.get(el)- 通过 HTML 元素获取 Toast 实例

  • el - HTMLElementstring(带有 CSS 选择器)。Toast 元素。

该方法返回 Toast 的实例

app.toast.open(el, animate)- 打开 Toast

  • el - HTMLElementstring(带有 CSS 选择器)。要打开的 Toast 元素。
  • animate - boolean。使用动画打开 Toast。

该方法返回 Toast 的实例

app.toast.close(el, animate)- 关闭 Toast

  • el - HTMLElementstring(带有 CSS 选择器)。要关闭的 Toast 元素。
  • animate - boolean。使用动画关闭 Toast。

该方法返回 Toast 的实例

app.toast.show(parameters)- 创建 Toast 实例并立即显示

  • parameters - 对象。带有 toast 参数的对象

该方法返回已创建的 Toast 实例

Toast 参数

现在我们来看看创建 Toast 时所需可用参数的列表

参数类型默认说明
elHTMLElementToast 元素。如果您已在 HTML 中有 Toast 元素并且希望使用该元素创建新实例,这会很有用
iconstringToast 图标 HTML 布局,例如 <i class="f7-icons">house</i> 或图像 <img src="path/to/icon.png" />
textstringToast 内文
positionstringbottomToast 位置。可以是 bottomcentertop
horizontalPositionstringleft宽屏上的 Toast 水平对齐方式。仅对顶部和底部 Toast 有影响。可以是 leftcenterright
closeButtonbooleanfalse添加 Toast 关闭按钮
closeButtonColorstring默认配色主题 之一
closeButtonTextstringOk关闭按钮文本
closeTimeoutnumber自动关闭 Toast 的延时(以毫秒为单位)
cssClassstring要添加的其他 css 类
destroyOnClosebooleanfalse关闭时销毁 Toast 实例
renderfunction用于渲染 Toast 的自定义函数。必须返回 Toast html
containerElHTMLElement
string
允许将 Toast 安装到自定义元素而不是应用程序根元素
onobject

具有事件处理程序的对象。例如

var toast = app.toast.create({
  text: 'Hello, how are you?',
  on: {
    opened: function () {
      console.log('Toast opened')
    }
  }
})

请注意,以下所有参数都可以在 toast 属性下的全局应用程序参数中使用,以设置所有通知的默认值。例如

var app = new Framework7({
  toast: {
    closeTimeout: 3000,
    closeButton: true,
  }
});

通知方法和属性

所以,要创建通知,我们必须调用

var toast = app.toast.create({ /* parameters */ })

接下来,我们拥有经过初始化的实例(如上例中的 toast 变量),其中包含有用的方法和属性

属性
toast.app链接到全局应用程序实例
toast.el通知 HTML 元素
toast.$el带有通知 HTML 元素的 Dom7 实例
toast.params通知参数
方法
toast.open()打开通知
toast.close()关闭通知
toast.on(事件, 处理程序)添加事件处理程序
toast.once(事件, 处理程序)添加将在触发后被删除的事件处理程序
toast.off(事件, 处理程序)删除事件处理程序
toast.off(事件)删除所有针对特定事件的处理程序
toast.emit(事件, ...args)在实例上触发事件

通知事件

通知将在通知元素上触发以下 DOM 事件,以及在应用程序和通知实例上触发事件

DOM 事件

事件目标说明
toast:open通知元素<div class="toast">当通知开始其打开动画时将触发该事件
toast:opened通知元素<div class="toast">当通知完成其打开动画后将触发该事件
toast:close通知元素<div class="toast">当通知开始其关闭动画时将触发该事件
toast:closed通知元素<div class="toast">当通知完成其关闭动画后将触发该事件

应用程序和通知实例事件

通知实例同时在自身实例和应用程序实例上触发事件。应用程序实例事件的名称相同,前面加有 toast 前缀。

事件参数目标说明
closeButtonClicktoasttoast当用户单击通知关闭按钮时将触发该事件。作为参数,事件处理程序会接收通知实例
toastCloseButtonClicktoastapp
opentoasttoast当通知开始其打开动画时将触发该事件。作为参数,事件处理程序会接收通知实例
toastOpentoastapp
openedtoasttoast当通知完成其打开动画后将触发该事件。作为参数,事件处理程序会接收通知实例
toastOpenedtoastapp
closetoasttoast当通知开始其关闭动画时将触发该事件。作为参数,事件处理程序会接收通知实例
toastClosetoastapp
closedtoasttoast当通知完成其关闭动画后将触发该事件。作为参数,事件处理程序会接收通知实例
toastClosedtoastapp
beforeDestroytoasttoast当通知实例即将被销毁之前将触发该事件。作为参数,事件处理程序会接收通知实例
toastBeforeDestroytoastapp

CSS 变量

以下是相关 CSS 变量(CSS 自定义属性)的列表。

:root {
  --f7-toast-font-size: 14px;
  --f7-toast-icon-size: 48px;
  --f7-toast-max-width: 568px;
}
.ios {
  --f7-toast-text-color: #fff;
  --f7-toast-bg-color: rgba(0, 0, 0, 0.75);
  --f7-toast-bg-color-rgb: 0, 0, 0;
  --f7-toast-padding-horizontal: 16px;
  --f7-toast-padding-vertical: 12px;
  --f7-toast-border-radius: 8px;
  --f7-toast-button-min-width: 64px;
}
.md {
  --f7-toast-padding-horizontal: 24px;
  --f7-toast-padding-vertical: 14px;
  --f7-toast-border-radius: 16px;
  --f7-toast-button-min-width: 64px;
}
.md,
.md .dark,
.md [class*='color-'] {
  --f7-toast-text-color: var(--f7-md-on-surface);
  --f7-toast-bg-color: var(--f7-md-surface-5);
}

示例

toast.html
<template>
  <div class="page">
    <div class="navbar">
      <div class="navbar-bg"></div>
      <div class="navbar-inner sliding">
        <div class="title">Toast</div>
      </div>
    </div>
    <div class="page-content">
      <div class="block block-strong-ios block-outline-ios">
        <p>Toasts provide brief feedback about an operation through a message on the screen.</p>
        <p>
          <a class="button button-fill" @click=${showToastBottom}>Toast on Bottom</a>
        </p>
        <p>
          <a class="button button-fill" @click=${showToastTop}>Toast on Top</a>
        </p>
        <p>
          <a class="button button-fill" @click=${showToastCenter}>Toast on Center</a>
        </p>
        <p>
          <a class="button button-fill" @click=${showToastIcon}>Toast with icon</a>
        </p>
        <p>
          <a class="button button-fill" @click=${showToastLargeMessage}>Toast with large message</a>
        </p>
        <p>
          <a class="button button-fill" @click=${showToastWithButton}>Toast with close button</a>
        </p>
        <p>
          <a class="button button-fill" @click=${showToastWithCustomButton}>Toast with custom button</a>
        </p>
        <p>
          <a class="button button-fill" @click=${showToastWithCallback}>Toast with callback on close</a>
        </p>
      </div>
    </div>
  </div>
</template>
<script>
  export default (props, { $f7, $theme, $on }) => {
    let toastBottom;
    let toastTop;
    let toastCenter;
    let toastIcon;
    let toastLargeMessage;
    let toastWithButton;
    let toastWithCustomButton;
    let toastWithCallback;

    const showToastBottom = () => {
      // Create toast
      if (!toastBottom) {
        toastBottom = $f7.toast.create({
          text: 'This is default bottom positioned toast',
          closeTimeout: 2000,
        });
      }
      // Open it
      toastBottom.open();
    }
    const showToastTop = () => {
      // Create toast
      if (!toastTop) {
        toastTop = $f7.toast.create({
          text: 'Top positioned toast',
          position: 'top',
          closeTimeout: 2000,
        });
      }
      // Open it
      toastTop.open();
    }
    const showToastCenter = () => {
      // Create toast
      if (!toastCenter) {
        toastCenter = $f7.toast.create({
          text: 'I\'m on center',
          position: 'center',
          closeTimeout: 2000,
        });
      }
      // Open it
      toastCenter.open();
    }
    const showToastIcon = () => {
      // Create toast
      if (!toastIcon) {
        toastIcon = $f7.toast.create({
          icon: $theme.ios ? '<i class="f7-icons">star_fill</i>' : '<i class="material-icons">star</i>',
          text: 'I\'m with icon',
          position: 'center',
          closeTimeout: 2000,
        });
      }
      // Open it
      toastIcon.open();
    }
    const showToastLargeMessage = () => {
      // Create toast
      if (!toastLargeMessage) {
        toastLargeMessage = $f7.toast.create({
          text: 'This toast contains a lot of text. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nihil, quae, ab. Delectus amet optio facere autem sapiente quisquam beatae culpa dolore.',
          closeTimeout: 2000,
        });
      }
      // Open it
      toastLargeMessage.open();
    }
    const showToastWithButton = () => {
      // Create toast
      if (!toastWithButton) {
        toastWithButton = $f7.toast.create({
          text: 'Toast with additional close button',
          closeButton: true,
        });
      }
      // Open it
      toastWithButton.open();
    }
    const showToastWithCustomButton = () => {
      // Create toast
      if (!toastWithCustomButton) {
        toastWithCustomButton = $f7.toast.create({
          text: 'Custom close button',
          closeButton: true,
          closeButtonText: 'Close Me',
          closeButtonColor: 'red',
        });
      }
      // Open it
      toastWithCustomButton.open();
    }
    const showToastWithCallback = () => {
      // Create toast
      if (!toastWithCallback) {
        toastWithCallback = $f7.toast.create({
          text: 'Callback on close',
          closeButton: true,
          on: {
            close: function () {
              $f7.dialog.alert('Toast closed');
            },
          }
        });
      }
      // Open it
      toastWithCallback.open();
    }

    $on('pageBeforeOut', () => {
      $f7.toast.close();
    })

    $on('pageBeforeRemove', () => {
      // Destroy toasts when page removed
      if (toastBottom) toastBottom.destroy();
      if (toastTop) toastTop.destroy();
      if (toastCenter) toastCenter.destroy();
      if (toastIcon) toastIcon.destroy();
      if (toastLargeMessage) toastLargeMessage.destroy();
      if (toastWithButton) toastWithButton.destroy();
      if (toastWithCustomButton) toastWithCustomButton.destroy();
      if (toastWithCallback) toastWithCallback.destroy();
    })

    return $render;
  }
</script>