提示框
提示框在用户悬停或轻触目标元素时显示信息文本。
提示框可以围绕任何包含任何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 - 字符串- 在指定的提示框中设置的新文本。
方法返回提示框实例
提示框参数
现在让我们查看需要创建提示框的可用参数列表:
参数 | 类型 | 默认 | 描述 |
---|---|---|---|
targetEl | HTMLElement 字符串 | 提示框目标元素。提示框将围绕此元素显示。HTMLElement或提示框目标元素的CSS选择器字符串 | |
text | 字符串 | 提示框文本或HTML内容 | |
偏移量 | 数字 | 0 | 提示框位置的额外偏移量(以像素为单位) |
触发 | 字符串 | 悬停 | 定义如何触发(打开)提示。可以是hover , click 或manual .如果 如果 |
cssClass | 字符串 | 将额外的CSS类添加到提示框元素。可用于额外的提示框样式 | |
render | function (tooltip) | 用于渲染提示框元素的函数,必须返回完整的提示框HTML布局字符串 | |
containerEl | HTMLElement 字符串 | 挂载提示框的元素。(默认为应用根元素app.el ) | |
委托 | 布尔值 | false | 启用委托提示框。如果需要为多个元素显示相同的提示框,则很有用。在这种情况下targetEl 必须指定为CSS选择器字符串,并且相同的提示框将重用于指定的元素。 |
on | 对象 | 带有事件处理程序的对象。例如:
|
提示框方法和属性
因此,要创建提示框,我们必须调用:
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);
}
示例
<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>