通知

使用 Notification 组件,您可以展示类似于 Push(或本地)系统通知的所需消息。

通知应用程序方法

接下来看看用于操作 Notification 的相关应用程序方法

app.notification.create(parameters)- 创建通知实例

  • parameters - 对象。具有通知参数的对象

方法返回已创建的通知的实例

app.notification.destroy(el)- 销毁通知实例

  • el - HTMLElement字符串(具有 CSS 选择器)或 对象。要销毁的通知元素或通知实例。

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

  • el - HTMLElement字符串(具有 CSS 选择器)。通知元素。

方法返回通知的实例

app.notification.open(el, animate)- 打开通知

  • el - HTMLElement字符串(具有 CSS 选择器)。要打开的通知元素。
  • animate - 布尔值。使用动画打开通知。

方法返回通知的实例

app.notification.close(el, animate)- 关闭通知

  • el - HTMLElement字符串(具有 CSS 选择器)。要关闭的通知元素。
  • animate - 布尔值。使用动画关闭通知。

方法返回通知的实例

通知参数

现在让我们看看创建通知所需的可用参数列表

参数类型默认值描述
elHTMLElement
字符串
通知元素。如果你已经在你的 HTML 中有通知元素,并且想要使用此元素创建新的实例,那么它会很有用
icon字符串通知图标 HTML 布局,例如 <i class="f7-icons">house</i> 或图片 <img src="path/to/icon.png" />
title字符串通知标题
titleRightText字符串标题右侧的其他文本
subtitle字符串通知子标题
text字符串通知正文文本
closeButton布尔值false添加通知关闭按钮
closeTimeout数字以毫秒为单位的超时延迟,可自动关闭通知
closeOnClick布尔值false如果启用,点击通知时将关闭通知
swipeToClose布尔值true如果启用,可以通过滑动手势关闭通知
cssClass字符串要添加的其他 CSS 类
render函数用于渲染通知的自定义函数。必须返回通知 html
on对象

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

var notification = app.notification.create({
  title: 'John Doe',
  text: 'Hello, how are you?',
  on: {
    opened: function () {
      console.log('Notification opened')
    }
  }
})

请注意,所有以下参数均可以在 notification 属性下的全局 app 参数中使用,为所有通知设置默认值。例如

var app = new Framework7({
  notification: {
    title: 'My App',
    closeTimeout: 3000,
  }
});

通知方法和属性

因此,要创建通知,我们必须调用

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

然后我们拥有其初始化实例(比如上面的例子中notification变量),它带有有用的方法和属性

属性
notification.app链接到全局应用程序实例
notification.elNotification(通知)HTML 元素
notification.$el包含 notification HTML 元素的 Dom7 实例
notification.paramsNotification(通知)参数
方法
notification.open()打开 Notification(通知)
notification.close()关闭 Notification(通知)
notification.on(event, handler)添加事件处理程序
notification.once(event, handler)添加事件处理程序,以便在其触发后立即删除
notification.off(event, handler)删除事件处理程序
notification.off(event)删除指定事件的所有处理程序
notification.emit(event, ...args)触发实例上的事件

Notification(通知)事件

Notification(通知)会在 Notification(通知)元素以及应用程序和 Notification(通知)实例上触发以下 DOM 事件和事件

DOM 事件

事件目标描述
notification:openNotification(通知)元素<div class="notification">当 Notification(通知)开始其打开动画时,将触发该事件
notification:openedNotification(通知)元素<div class="notification">当 Notification(通知)完成其打开动画后,将触发该事件
notification:closeNotification(通知)元素<div class="notification">当 Notification(通知)开始其关闭动画时,将触发该事件
notification:closedNotification(通知)元素<div class="notification">当 Notification(通知)完成其关闭动画后,将触发该事件

应用程序和 Notification(通知)实例事件

Notification(通知)实例同时在自身实例和应用程序实例上触发事件。应用程序实例事件具有以notification为前缀的相同名称。

事件自变量目标描述
clicknotificationnotification当用户在 Notification(通知)元素上单击时,将触发该事件。作为自变量,事件处理程序接收 Notification(通知)实例
notificationClicknotificationapp
opennotificationnotification当 Notification(通知)开始其打开动画时,将触发该事件。作为自变量,事件处理程序接收 Notification(通知)实例
notificationOpennotificationapp
openednotificationnotification当 Notification(通知)完成其打开动画后,将触发该事件。作为自变量,事件处理程序接收 Notification(通知)实例
notificationOpenednotificationapp
closenotificationnotification当 Notification(通知)开始其关闭动画时,将触发该事件。作为自变量,事件处理程序接收 Notification(通知)实例
notificationClosenotificationapp
closednotificationnotification当 Notification(通知)完成其关闭动画后,将触发该事件。作为自变量,事件处理程序接收 Notification(通知)实例
notificationClosednotificationapp
beforeDestroynotificationnotification就在 Notification(通知)实例被销毁之前,将触发该事件。作为自变量,事件处理程序接收 Notification(通知)实例
notificationBeforeDestroynotificationapp

CSS 变量

下面列出了相关的 CSS 变量(自定义 CSS 属性)。

:root {
  --f7-notification-max-width: 568px;
  --f7-notification-subtitle-text-transform: none;
  --f7-notification-subtitle-line-height: 1.35;
  --f7-notification-text-text-transform: none;
  --f7-notification-text-font-weight: 400;
}
.ios {
  --f7-notification-margin: 8px;
  --f7-notification-padding-horizontal: 10px;
  --f7-notification-padding-vertical: 10px;
  --f7-notification-border-radius: 12px;
  --f7-notification-box-shadow: 0px 5px 25px -10px rgba(0, 0, 0, 0.7);
  --f7-notification-icon-size: 20px;
  --f7-notification-title-font-size: 13px;
  --f7-notification-title-text-transform: uppercase;
  --f7-notification-title-line-height: 1.4;
  --f7-notification-title-font-weight: 400;
  --f7-notification-title-letter-spacing: 0.02em;
  --f7-notification-title-right-font-size: 13px;
  --f7-notification-subtitle-font-size: 15px;
  --f7-notification-subtitle-font-weight: 600;
  --f7-notification-text-font-size: 15px;
  --f7-notification-text-line-height: 1.2;
  --f7-notification-bg-color: rgba(250, 250, 250, 0.95);
  --f7-notification-bg-color-rgb: 255, 255, 255;
  --f7-notification-title-color: #000;
  --f7-notification-title-right-color: rgba(0, 0, 0, 0.45);
  --f7-notification-subtitle-color: #000;
  --f7-notification-text-color: #000;
}
.ios .dark,
.ios.dark {
  --f7-notification-bg-color: rgba(30, 30, 30, 0.95);
  --f7-notification-bg-color-rgb: 30, 30, 30;
  --f7-notification-title-color: #fff;
  --f7-notification-text-color: #fff;
  --f7-notification-subtitle-color: #fff;
  --f7-notification-title-right-color: rgba(255, 255, 255, 0.55);
}
.md {
  --f7-notification-margin: 16px;
  --f7-notification-padding-vertical: 20px;
  --f7-notification-padding-horizontal: 16px;
  --f7-notification-border-radius: 16px;
  --f7-notification-box-shadow: none;
  --f7-notification-icon-size: 24px;
  --f7-notification-title-font-size: 16px;
  --f7-notification-title-text-transform: none;
  --f7-notification-title-line-height: 1.35;
  --f7-notification-title-font-weight: 500;
  --f7-notification-title-right-font-size: 12px;
  --f7-notification-subtitle-font-size: 14px;
  --f7-notification-subtitle-font-weight: 400;
  --f7-notification-text-font-size: 14px;
  --f7-notification-text-line-height: 1.35;
}
.md,
.md .dark,
.md [class*='color-'] {
  --f7-notification-title-color: var(--f7-md-on-surface);
  --f7-notification-bg-color: var(--f7-md-surface-5);
  --f7-notification-text-color: var(--f7-md-on-surface-variant);
  --f7-notification-title-right-color: var(--f7-md-on-surface-variant);
  --f7-notification-subtitle-color: var(--f7-md-on-surface);
}

示例

notifications.html
<template>
  <div class="page">
    <div class="navbar">
      <div class="navbar-bg"></div>
      <div class="navbar-inner sliding">
        <div class="title">Notifications</div>
      </div>
    </div>
    <div class="page-content">
      <div class="block block-strong-ios block-outline-ios">
        <p>Framework7 comes with simple Notifications component that allows you to show some useful messages to user and
          request basic actions.</p>
        <p><a class="button button-fill" @click=${showNotificationFull}>Full layout notification</a></p>
        <p><a class="button button-fill" @click=${showNotificationWithButton}>With close button</a></p>
        <p><a class="button button-fill" @click=${showNotificationCloseOnClick}>Click to close</a></p>
        <p><a class="button button-fill" @click=${showNotificationCallbackOnClose}>Callback on close</a></p>
      </div>
    </div>
  </div>
</template>
<script>
  export default (props, { $f7, $el, $on }) => {
    let notificationFull;
    let notificationWithButton;
    let notificationCloseOnClick;
    let notificationCallbackOnClose;

    const showNotificationFull = () => {
      // Create notification
      if (!notificationFull) {
        notificationFull = $f7.notification.create({
          icon: '<i class="icon icon-f7"></i>',
          title: 'Framework7',
          titleRightText: 'now',
          subtitle: 'This is a subtitle',
          text: 'This is a simple notification message',
          closeTimeout: 3000,
        });
      }
      // Open it
      notificationFull.open();
    }
    const showNotificationWithButton = () => {
      // Create notification
      if (!notificationWithButton) {
        notificationWithButton = $f7.notification.create({
          icon: '<i class="icon icon-f7"></i>',
          title: 'Framework7',
          subtitle: 'Notification with close button',
          text: 'Click (x) button to close me',
          closeButton: true,
        });
      }
      // Open it
      notificationWithButton.open();
    }
    const showNotificationCloseOnClick = () => {
      // Create notification
      if (!notificationCloseOnClick) {
        notificationCloseOnClick = $f7.notification.create({
          icon: '<i class="icon icon-f7"></i>',
          title: 'Framework7',
          titleRightText: 'now',
          subtitle: 'Notification with close on click',
          text: 'Click me to close',
          closeOnClick: true,
        });
      }
      // Open it
      notificationCloseOnClick.open();
    }
    const showNotificationCallbackOnClose = () => {
      // Create notification
      if (!notificationCallbackOnClose) {
        notificationCallbackOnClose = $f7.notification.create({
          icon: '<i class="icon icon-f7"></i>',
          title: 'Framework7',
          titleRightText: 'now',
          subtitle: 'Notification with close on click',
          text: 'Click me to close',
          closeOnClick: true,
          on: {
            close: function () {
              $f7.dialog.alert('Notification closed');
            },
          },
        });
      }
      // Open it
      notificationCallbackOnClose.open();
    }

    $on('pageBeforeRemove', () => {
      $f7.notification.close();
      if (notificationFull) notificationFull.destroy();
      if (notificationWithButton) notificationWithButton.destroy();
      if (notificationCloseOnClick) notificationCloseOnClick.destroy();
      if (notificationCallbackOnClose) notificationCallbackOnClose.destroy();
    });

    return $render;
  };
</script>