ツールチップ
ツールチップは、ユーザーがターゲット要素にカーソルを合わせたり、タップしたりしたときに、情報テキストを表示します。
ツールチップは、任意の要素の周りに、任意の HTML コンテンツを内部に含めて配置できます。
ツールチップのレイアウト
ツールチップは JavaScript のみのコンポーネントであり、HTML レイアウトはありません。
ツールチップアプリのメソッド
ツールチップを作成/初期化する必要があります。ツールチップを操作するための関連するアプリのメソッドを見てみましょう。
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 | ツールチップのターゲット要素。ツールチップはこの要素の周りに表示されます。ツールチップのターゲット要素の HTMLElement または 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 | ツールチップのターゲット 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(event, handler) | イベントハンドラーを追加します |
tooltip.once(event, handler) | 発生後に削除されるイベントハンドラーを追加します |
tooltip.off(event, handler) | イベントハンドラーを削除します |
tooltip.off(event) | 指定されたイベントのすべてのハンドラーを削除します |
tooltip.emit(event, ...args) | インスタンスでイベントを発生させます |
ツールチップイベント
ツールチップは、ツールチップ要素で次の DOM イベントを発生させ、アプリとツールチップインスタンスでイベントを発生させます
DOM イベント
イベント | ターゲット | 説明 |
---|---|---|
tooltip:show | ツールチップ要素 ツールチップターゲット | ツールチップが表示されると、イベントがトリガーされます。 |
tooltip:hide | ツールチップ要素 ツールチップターゲット | ツールチップが非表示になると、イベントがトリガーされます。 |
tooltip:beforedestroy | ツールチップ要素 ツールチップターゲット | ツールチップインスタンスが破棄される直前に、イベントがトリガーされます。 |
アプリおよびツールチップインスタンスイベント
ツールチップインスタンスは、自身のインスタンスとアプリインスタンスの両方でイベントを発行します。アプリインスタンスのイベントには、同じ名前の先頭に tooltip
が付いています。
イベント | 引数 | ターゲット | 説明 |
---|---|---|---|
show | (tooltip) | tooltip | ツールチップが表示されると、イベントがトリガーされます。引数として、イベントハンドラーはツールチップインスタンスを受け取ります。 |
tooltipShow | (tooltip) | app | |
hide | (tooltip) | tooltip | ツールチップが非表示になると、イベントがトリガーされます。引数として、イベントハンドラーはツールチップインスタンスを受け取ります。 |
tooltipHide | (tooltip) | app | |
beforeDestroy | (tooltip) | 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
アプリメソッドを使用できます。
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>