提示框

提示框在用户悬停或轻触目标元素时显示信息文本。

提示框可以围绕任何包含任何HTML内容的元素定位。

提示框布局

提示框是一个纯JavaScript组件,它没有HTML布局。

提示框应用方法

我们需要创建/初始化提示框。让我们查看与提示框相关的工作方法:

app.tooltip.create(参数)- 创建提示框实例

  • 参数 - 对象. 带有提示框参数的对象

方法返回创建的提示框实例

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

  • targetEl - HTMLElement字符串(使用 CSS 选择器) 或对象(instance). 要销毁的提示框元素或提示框实例。

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

  • targetEl - HTMLElement字符串(带CSS选择器). 提示框目标元素。

方法返回提示框实例

app.tooltip.show(targetEl)- 显示提示框

  • targetEl - HTMLElement字符串(带CSS选择器). 提示框目标元素。

方法返回提示框实例

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

  • targetEl - HTMLElement字符串(带CSS选择器). 提示框目标元素。

方法返回提示框实例

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

  • targetEl - HTMLElement字符串(带CSS选择器). 提示框目标元素。
  • text - 字符串- 在指定的提示框中设置的新文本。

方法返回提示框实例

提示框参数

现在让我们查看需要创建提示框的可用参数列表:

参数类型默认描述
targetElHTMLElement
字符串
提示框目标元素。提示框将围绕此元素显示。HTMLElement或提示框目标元素的CSS选择器字符串
text字符串提示框文本或HTML内容
偏移量数字0提示框位置的额外偏移量(以像素为单位)
触发字符串悬停定义如何触发(打开)提示。可以是hover, clickmanual.

如果hover- 在桌面端鼠标悬停时切换提示框,在触摸设备上轻触并保持时切换

如果manual- 提示框的可见性应通过tooltip.show()tooltip.hide()方法中覆盖。

cssClass字符串将额外的CSS类添加到提示框元素。可用于额外的提示框样式
renderfunction (tooltip)用于渲染提示框元素的函数,必须返回完整的提示框HTML布局字符串
containerElHTMLElement
字符串
挂载提示框的元素。(默认为应用根元素app.el)
委托布尔值false启用委托提示框。如果需要为多个元素显示相同的提示框,则很有用。在这种情况下targetEl必须指定为CSS选择器字符串,并且相同的提示框将重用于指定的元素。
on对象

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

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.targetEl提示框目标HTML元素
tooltip.$targetEl包含提示框目标HTML元素的Dom7实例
tooltip.el提示框本身的HTML元素
tooltip.$el包含提示框HTML元素的Dom7实例
tooltip.text提示框文本/内容
tooltip.opened布尔属性,指示其是否打开/可见
tooltip.params提示框参数
方法
tooltip.show(targetEl)在元素周围显示targetEl如果targetEl未指定,则它将使用targetEl在初始化时传递的参数
tooltip.hide()隐藏提示框
tooltip.setText(text)将提示框文本或HTML内容更改为新内容
tooltip.setTargetEl(targetEl)将提示框的目标元素更改为指定的元素
tooltip.destroy()销毁提示框实例
tooltip.on(事件上触发, 处理程序)添加事件处理程序
tooltip.once(事件上触发, 处理程序)添加在触发后将被移除的事件处理程序
tooltip.off(事件上触发, 处理程序)移除事件处理程序
tooltip.off(事件上触发)移除指定事件的所有处理程序
tooltip.emit(事件上触发, ...args)在实例上触发事件

提示框事件

提示框将在提示框元素和应用程序和提示框实例上触发以下DOM事件:

DOM 事件

事件Target描述
tooltip:show提示框元素
提示框目标
当提示框变为可见时将触发事件
tooltip:hide提示框元素
提示框目标
当提示框变为隐藏时将触发事件
tooltip:beforedestroy提示框元素
提示框目标
在提示框实例将被销毁之前将触发事件

应用程序和提示框实例事件

提示框实例在自身实例和应用程序实例上发出事件。应用程序实例事件具有相同名称,以tooltip.

事件参数Target描述
show(tooltip)提示当提示框变为可见时将触发事件。作为参数,事件处理程序接收提示框实例
tooltipShow(tooltip)app
hide(tooltip)提示当提示框变为隐藏时将触发事件。作为参数,事件处理程序接收Toolitp实例
tooltipHide(tooltip)app
beforeDestroy(tooltip)提示在提示框实例将被销毁之前将触发事件。作为参数,事件处理程序接收提示框实例
tooltipBeforeDestroy(tooltip)app

提示框自动初始化

如果你不需要使用提示框API,并且你的提示框目标元素在页面内,并且在页面初始化时在DOM中呈现,那么它可以通过仅向目标元素添加tooltip-init类,并在其data-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>

中指定提示框文本来自动初始化。app.tooltip.get app method:

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>