工具提示

工具提示会在用户悬停或轻按目标元素时显示提供信息的文本。

工具提示可定位在任何元素周围,内部包含任意 HTML 内容。

工具提示布局

工具提示是一种纯 JavaScript 组件,它没有 HTML 布局。

工具提示应用程序方法

我们需要创建/初始化浮动提示。我们来看一下与浮动提示相关的 App 方法

app.tooltip.create(parameters)- 创建浮动提示实例

  • parameters - object。具有浮动提示参数的对象

方法返回创建的浮动提示实例

app.tooltip.destroy(targetEl)- 销毁浮动提示实例

  • targetEl - HTMLElementstring(使用 CSS 选择器)或 object(实例)。要销毁的浮动提示元素或浮动提示实例。

app.tooltip.get(targetEl)- 通过其目标 HTML 元素获取浮动提示实例

  • targetEl - HTMLElementstring(使用 CSS 选择器)。浮动提示目标元素。

方法返回浮动提示实例

app.tooltip.show(targetEl)- 显示浮动提示

  • targetEl - HTMLElementstring(使用 CSS 选择器)。浮动提示目标元素。

方法返回浮动提示实例

app.tooltip.hide(targetEl)- 隐藏浮动提示

  • targetEl - HTMLElementstring(使用 CSS 选择器)。浮动提示目标元素。

方法返回浮动提示实例

app.tooltip.setText(targetEl, text)- 更改浮动提示文本

  • targetEl - HTMLElementstring(使用 CSS 选择器)。浮动提示目标元素。
  • text - string - 要在指定浮动提示中设置的新文本。

方法返回浮动提示实例

浮动提示参数

现在,我们来看一下创建浮动提示所需的参数列表

参数类型默认值描述
targetElHTMLElement
string
浮动提示目标元素。浮动提示将显示在此元素周围。浮动提示目标元素的 HTML 元素或 CSS 选择器字符串
textstring浮动提示文本或 HTML 内容
offsetnumber0浮动提示位置的额外偏移(以 px 为单位)
triggerstringhover定义如何触发(打开)浮动提示。可以是 hoverclickmanual

如果是 hover - 浮动提示将在桌面上的鼠标悬停时切换,在触控设备上用轻触并按住时切换

如果是 manual - 浮动提示可见性应通过 tooltip.show()tooltip.hide() 方法控制

cssClassstring额外的 css 类将添加到浮动提示元素中。可用于额外的浮动提示样式
renderfunction (tooltip)用于呈现浮动提示元素的函数,必须返回完整的浮动提示 HTML 布局字符串
containerElHTMLElement
string
用于加载浮动提示的元素。(默认为应用根元素 app.el
delegatedbooleanfalse启用委派浮动提示。如果您需要为多个元素显示相同的浮动提示,这很有用。在这种情况下,targetEl 必须指定为 CSS 选择器字符串,并且相同的浮动提示会再次用于指定元素。
onobject

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

var tooltip = app.tooltip.create({
  targetEl: '.some-link',
  on: {
    show: function () {
      console.log('Tooltip became visible')
    }
  }
})

浮动提示方法和属性

因此,要创建浮动提示,我们必须调用

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

之后,我们有其初始化的实例(如上面示例中的 tooltip 变量),具有有用的方法和属性

属性
tooltip.app全局应用程序实例的链接
tooltip.targetElTooltip 目标 HTML 元素
tooltip.$targetEl带有 tooltip 目标 HTML 元素的 Dom7 实例
tooltip.elTooltip 本身的 HTML 元素
tooltip.$el带有 tooltip HTML 元素的 Dom7 实例
tooltip.textTooltip 文本/内容
tooltip.opened用于指示是否已打开/可见的布尔属性
tooltip.paramsTooltip 参数
方法
tooltip.show(targetEl)targetEl 元素周围显示 tooltip。如果未指定 targetEl,则将使用初始化时参数中传递的 targetEl
tooltip.hide()隐藏 tooltip
tooltip.setText(text)将 tooltip 文本或 HTML 内容更改为新的文本或内容
tooltip.setTargetEl(targetEl)将 tooltip 的目标元素更改为指定的元素
tooltip.destroy()销毁 tooltip 实例
tooltip.on(event, handler)添加事件处理程序
tooltip.once(event, handler)添加事件处理程序,该处理程序将在触发后被移除
tooltip.off(event, handler)删除事件处理函数
tooltip.off(event)删除指定事件的所有处理程序
tooltip.emit(event, ...args)在实例上触发事件

Tooltip 事件

Tooltip 将在 tooltip 元素以及 app 和 tooltip 实例上触发以下 DOM 事件

DOM 事件

事件目标描述
tooltip:showTooltip 元素
Tooltip 目标
当 Tooltip 变为可见时将触发事件
tooltip:hideTooltip 元素
Tooltip 目标
当 Tooltip 变为隐藏时将触发事件
tooltip:beforedestroyTooltip 元素
Tooltip 目标
当 Tooltip 实例即将被销毁时将触发事件

App 和 Tooltip 实例事件

Tooltip 实例在自身实例和 app 实例上同时触发事件。App 实例事件具有相同名称,前缀为 tooltip

事件参数目标描述
show(tooltip)tooltip当 Tooltip 变为可见时将触发事件。作为参数,事件处理程序接收 Tooltip 实例
tooltipShow(tooltip)app
hide(tooltip)tooltip当 Tooltip 变为隐藏时将触发事件。作为参数,事件处理程序接收 Toolitp 实例
tooltipHide(tooltip)app
beforeDestroy(tooltip)tooltip当 Tooltip 实例即将被销毁时将触发事件。作为参数,事件处理程序接收 Tooltip 实例
tooltipBeforeDestroy(tooltip)app

Tooltip 自动初始化

如果您不需要使用 Tooltip API,并且您的 Tooltip 目标元素位于页面内并在页面初始化时显示在 DOM 中,那么只需将 tooltip-init 类添加到目标元素,并在其 data-tooltip 属性中指定 tooltip 文本即可自动初始化。

<!-- Add tooltip-init class and specify tooltip text in data-tooltip attribute -->
<a href="/profile/" class="link tooltip-init profile-link" data-tooltip="Profile settings">
  <i class="profile-icon"></i>
</a>

在此情况下,如果您需要访问已创建的 Tooltip 实例,可以使用 app.tooltip.get app 方法

var tooltip = app.tooltip.get('.profile-link');
// change tooltip text
tooltip.setText('Profile');

CSS 变量

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

:root {
  --f7-tooltip-padding: 8px 16px;
  --f7-tooltip-font-size: 14px;
  --f7-tooltip-font-weight: 500;
  --f7-tooltip-desktop-padding: 6px 8px;
  --f7-tooltip-desktop-font-size: 12px;
}
.ios {
  --f7-tooltip-border-radius: 4px;
  --f7-tooltip-bg-color: rgba(0, 0, 0, 0.87);
  --f7-tooltip-text-color: #fff;
}
.md {
  --f7-tooltip-border-radius: 8px;
}
.md,
.md .dark,
.md [class*='color-'] {
  --f7-tooltip-bg-color: var(--f7-md-secondary);
  --f7-tooltip-text-color: var(--f7-md-on-secondary);
}

示例

tooltip.html
<template>
  <div class="page">
    <div class="navbar">
      <div class="navbar-bg"></div>
      <div class="navbar-inner sliding">
        <div class="title">Tooltip</div>
        <div class="right">
          <a class="link navbar-tooltip">
            <i class="icon f7-icons if-not-md">info_circle_fill</i>
            <i class="icon material-icons if-md">info_outline</i>
          </a>
        </div>
      </div>
    </div>
    <div class="page-content">
      <div class="block block-strong inset">
        <p>Tooltips display informative text when users hover over, or tap an target element.</p>
        <p>Tooltip can be positioned around any element with any HTML content inside.</p>
      </div>
      <div class="block block-strong inset">
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec lacinia augue urna, in tincidunt augue
          hendrerit ut. In nulla massa, facilisis non consectetur a, tempus semper ex. Proin eget volutpat nisl. Integer
          lacinia maximus nunc molestie viverra. ${tooltipIcon} Etiam ullamcorper ultricies ipsum, ut congue tortor
          rutrum at. Vestibulum rutrum risus a orci dictum, in placerat leo finibus. Sed a congue enim, ut dictum felis.
          Aliquam erat volutpat. Etiam id nisi in magna egestas malesuada. Sed vitae orci sollicitudin, accumsan nisi a,
          bibendum felis. Maecenas risus libero, gravida ut tincidunt auctor, ${tooltipIcon} aliquam non lectus. Nam
          laoreet turpis erat, eget bibendum leo suscipit nec.</p>
        <p>Vestibulum ${tooltipIcon} gravida dui magna, eget pulvinar ligula molestie hendrerit. Mauris vitae facilisis
          justo. Nam velit mi, pharetra sit amet luctus quis, consectetur a tellus. Maecenas ac magna sit amet eros
          aliquam rhoncus. Ut dapibus vehicula lectus, ac blandit felis ultricies at. In sollicitudin, lorem eget
          volutpat viverra, magna ${tooltipIcon} felis tempus nisl, porta consectetur nunc neque eget risus. Phasellus
          vestibulum leo at ante ornare, vel congue justo tincidunt.</p>
        <p>Praesent tempus enim id lectus porta, at rutrum purus imperdiet. Donec eget sem vulputate, scelerisque diam
          nec, consequat turpis. Ut vel convallis felis. Integer ${tooltipIcon} neque ex, sollicitudin vitae magna
          eget, ultrices volutpat dui. Sed placerat odio hendrerit consequat lobortis. Fusce pulvinar facilisis rhoncus.
          Sed erat ipsum, consequat molestie suscipit vitae, malesuada a ${tooltipIcon} massa.</p>
      </div>
      <div class="block-title">Auto Initialization</div>
      <div class="block block-strong inset">
        <p>For simple cases when you don't need a lot of control over the Tooltip, it can be initialized automatically
          with <code>tooltip-init</code> class and <code>data-tooltip</code> attribute: <a style="display: inline-block"
            class="button button-round button-outline button-small tooltip-init"
            data-tooltip="Button tooltip text">Button with Tooltip</a></p>
      </div>
    </div>
  </div>
</template>
<script>
  export default (props, { $f7, $h, $theme, $onMounted, $onBeforeUnmount }) => {
    let tooltipIcon = $theme.ios
      ? $h`<i style="font-size: 20px" class="icon f7-icons icon-tooltip">info_circle_fill</i>`
      : $h`<i style="font-size: 20px" class="icon material-icons icon-tooltip">info</i>`;
    let iconTooltip;
    let navbarTooltip;

    $onMounted(() => {
      iconTooltip = $f7.tooltip.create({
        targetEl: '.icon-tooltip',
        text: 'Tooltip text',
      });
      navbarTooltip = $f7.tooltip.create({
        targetEl: '.navbar-tooltip',
        text: 'One more tooltip<br />with more text<br /><em>and custom formatting</em>'
      });
    })

    $onBeforeUnmount(() => {
      if (iconTooltip) iconTooltip.destroy();
      if (navbarTooltip) navbarTooltip.destroy();
    })

    return $render;
  }
</script>