工具提示
工具提示会在用户悬停或轻按目标元素时显示提供信息的文本。
工具提示可定位在任何元素周围,内部包含任意 HTML 内容。
工具提示布局
工具提示是一种纯 JavaScript 组件,它没有 HTML 布局。
工具提示应用程序方法
我们需要创建/初始化浮动提示。我们来看一下与浮动提示相关的 App 方法
app.tooltip.create(parameters)- 创建浮动提示实例
- parameters - object。具有浮动提示参数的对象
方法返回创建的浮动提示实例
app.tooltip.destroy(targetEl)- 销毁浮动提示实例
- targetEl - HTMLElement 或 string(使用 CSS 选择器)或 object(实例)。要销毁的浮动提示元素或浮动提示实例。
app.tooltip.get(targetEl)- 通过其目标 HTML 元素获取浮动提示实例
- targetEl - HTMLElement 或 string(使用 CSS 选择器)。浮动提示目标元素。
方法返回浮动提示实例
app.tooltip.show(targetEl)- 显示浮动提示
- targetEl - HTMLElement 或 string(使用 CSS 选择器)。浮动提示目标元素。
方法返回浮动提示实例
app.tooltip.hide(targetEl)- 隐藏浮动提示
- targetEl - HTMLElement 或 string(使用 CSS 选择器)。浮动提示目标元素。
方法返回浮动提示实例
app.tooltip.setText(targetEl, text)- 更改浮动提示文本
- targetEl - HTMLElement 或 string(使用 CSS 选择器)。浮动提示目标元素。
- text - string - 要在指定浮动提示中设置的新文本。
方法返回浮动提示实例
浮动提示参数
现在,我们来看一下创建浮动提示所需的参数列表
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
targetEl | HTMLElement string | 浮动提示目标元素。浮动提示将显示在此元素周围。浮动提示目标元素的 HTML 元素或 CSS 选择器字符串 | |
text | string | 浮动提示文本或 HTML 内容 | |
offset | number | 0 | 浮动提示位置的额外偏移(以 px 为单位) |
trigger | string | hover | 定义如何触发(打开)浮动提示。可以是 hover 、click 或 manual 。如果是 如果是 |
cssClass | string | 额外的 css 类将添加到浮动提示元素中。可用于额外的浮动提示样式 | |
render | function (tooltip) | 用于呈现浮动提示元素的函数,必须返回完整的浮动提示 HTML 布局字符串 | |
containerEl | HTMLElement string | 用于加载浮动提示的元素。(默认为应用根元素 app.el ) | |
delegated | boolean | false | 启用委派浮动提示。如果您需要为多个元素显示相同的浮动提示,这很有用。在这种情况下,targetEl 必须指定为 CSS 选择器字符串,并且相同的浮动提示会再次用于指定元素。 |
on | object | 带有事件处理程序的对象。例如
|
浮动提示方法和属性
因此,要创建浮动提示,我们必须调用
var tooltip = app.tooltip.create({ /* parameters */ })
之后,我们有其初始化的实例(如上面示例中的 tooltip
变量),具有有用的方法和属性
属性 | |
---|---|
tooltip.app | 全局应用程序实例的链接 |
tooltip.targetEl | Tooltip 目标 HTML 元素 |
tooltip.$targetEl | 带有 tooltip 目标 HTML 元素的 Dom7 实例 |
tooltip.el | Tooltip 本身的 HTML 元素 |
tooltip.$el | 带有 tooltip HTML 元素的 Dom7 实例 |
tooltip.text | Tooltip 文本/内容 |
tooltip.opened | 用于指示是否已打开/可见的布尔属性 |
tooltip.params | Tooltip 参数 |
方法 | |
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:show | Tooltip 元素 Tooltip 目标 | 当 Tooltip 变为可见时将触发事件 |
tooltip:hide | Tooltip 元素 Tooltip 目标 | 当 Tooltip 变为隐藏时将触发事件 |
tooltip:beforedestroy | Tooltip 元素 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);
}
示例
<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>