Popover
Popoverコンポーネントは、Popover内のコンテンツの表示を管理するために使用されます。Popoverを使用して、一時的に情報を表示します。Popoverは、ユーザーがPopoverウィンドウの外側をタップするか、明示的に閉じられるまで表示されたままになります。
小さな画面(iPhone)ではPopoverを使用しないことをお勧めします。小さな画面では、代わりにアクションシートを使用する必要があります。
Popoverレイアウト
まず、Popoverのレイアウトを見てみましょう。非常にシンプルです。
<body>
...
<div class="popover">
<!-- Popover's arrow -->
<div class="popover-arrow"></div>
<!-- Popover content -->
<div class="popover-inner">
<!-- Any HTML content here -->
</div>
</div>
</body>
Popoverは高度にカスタマイズ可能な要素であり、ナビゲーションを含む別のビューなど、何でも内部に配置できます。
Popoverアプリメソッド
Popoverを操作するための関連するアプリメソッドを見てみましょう。
app.popover.create(パラメータ)- Popoverインスタンスを作成します
- パラメータ - オブジェクト。Popoverパラメータを含むオブジェクト
メソッドは作成されたPopoverのインスタンスを返します。
app.popover.destroy(el)- Popoverインスタンスを破棄します
- el - HTMLElementまたは文字列(CSSセレクタ付き)またはオブジェクト。破棄するPopover要素またはPopoverインスタンス。
app.popover.get(el)- HTML要素からPopoverインスタンスを取得します
- el - HTMLElementまたは文字列(CSSセレクタ付き)。Popover要素。
メソッドはPopoverのインスタンスを返します。
app.popover.open(el, targetEl, animate)- Popoverを開きます
- el - HTMLElementまたは文字列(CSSセレクタ付き)。開くPopover要素。
- targetEl - HTMLElementまたは文字列(CSSセレクタ付き)。この要素の周りにPopoverの位置を設定するターゲット要素。
- animate - ブール値。アニメーション付きでPopoverを開きます。
メソッドはPopoverのインスタンスを返します。
app.popover.close(el, animate)- Popoverを閉じます
- el - HTMLElementまたは文字列(CSSセレクタ付き)。閉じるPopover要素。
- animate - ブール値。アニメーション付きでPopoverを閉じます。
メソッドはPopoverのインスタンスを返します。
Popoverパラメータ
それでは、Popoverの作成に必要なパラメータのリストを見てみましょう。
パラメータ | 型 | デフォルト | 説明 |
---|---|---|---|
el | HTMLElement | Popover要素。HTMLに既にPopover要素があり、この要素を使用して新しいインスタンスを作成する場合に役立ちます。 | |
arrow | ブール値 | true | Popoverの矢印/角を有効にします。 |
content | 文字列 | 完全なPopover HTMLレイアウト文字列。Popover要素を動的に作成する場合に役立ちます。 | |
verticalPosition | 文字列 | auto | Popoverの垂直方向の位置を強制します。「auto」、「top」、または「bottom」を指定できます。 |
backdrop | ブール値 | true | Popoverのバックドロップ(背後の暗い半透明レイヤー)を有効にします。 |
backdropUnique | ブール値 | false | 有効にすると、このモーダル専用の一意のバックドロップ要素が作成されます。 |
backdropEl | HTMLElement 文字列 | カスタムバックドロップ要素のHTML要素またはCSSセレクタ文字列 | |
closeByBackdropClick | ブール値 | true | 有効にすると、バックドロップをクリックするとPopoverが閉じられます。 |
closeByOutsideClick | ブール値 | true | 有効にすると、Popoverの外側をクリックすると閉じられます。 |
closeOnEscape | ブール値 | false | 有効にすると、ESCキーを押すとPopoverが閉じられます。 |
animate | ブール値 | true | Popoverをアニメーション付きで開閉するかどうかを指定します。「.open()」メソッドと「.close()」メソッドで上書きできます。 |
targetEl | HTMLElement 文字列 | ターゲット要素のHTML要素またはCSSセレクタ文字列 | |
targetX | 数値 | 画面の左端からの仮想ターゲット要素の水平方向のオフセット。実際のターゲット要素(`targetEl`)を使用しない場合に必要です。 | |
targetY | 数値 | 画面の上端からの仮想ターゲット要素の垂直方向のオフセット。実際のターゲット要素(`targetEl`)を使用しない場合に必要です。 | |
targetWidth | 数値 | 0 | 仮想ターゲット要素の幅(px単位)。実際のターゲット要素(`targetEl`)を使用しない場合に必要です。 |
targetHeight | 数値 | 0 | 仮想ターゲット要素の高さ(px単位)。実際のターゲット要素(`targetEl`)を使用しない場合に必要です。 |
containerEl | HTMLElement 文字列 | モーダルをマウントする要素(デフォルトはアプリのルート要素) | |
on | オブジェクト | イベントハンドラを含むオブジェクト。例えば
|
これらのパラメータはすべて、`popover`プロパティの下にあるグローバルアプリパラメータで使用して、すべてのPopoverのデフォルトを設定できます。例えば
var app = new Framework7({
popover: {
closeByBackdropClick: false,
}
});
自動初期化されたPopover(例:`app.popover.create`を使用して作成しない)を使用する場合は、`data-`属性を介して使用可能なすべてのPopoverパラメータを渡すことができます。例えば
<!-- Pass parameters as kebab-case data attributes -->
<div class="popover" data-close-on-escape="true" data-backdrop="false">
...
</div>
Popoverメソッドとプロパティ
Popoverを作成するには、次のコードを呼び出します。
var popover = app.popover.create({ /* parameters */ })
その後、便利なメソッドとプロパティを持つ初期化されたインスタンス(上記の例では`popover`変数)が得られます。
プロパティ | |
---|---|
popover.app | グローバルアプリインスタンスへのリンク |
popover.el | Popover HTML要素 |
popover.$el | Popover HTML要素を持つDom7インスタンス |
popover.backdropEl | バックドロップHTML要素 |
popover.$backdropEl | バックドロップHTML要素を持つDom7インスタンス |
popover.targetEl | PopoverターゲットHTML要素 |
popover.$targetEl | PopoverターゲットHTML要素を持つDom7インスタンス |
popover.params | Popoverパラメータ |
popover.opened | Popoverが開いているかどうかを示すブール値のプロパティ |
メソッド | |
popover.open(targetEl, animate) | ターゲット要素の周りにPopoverを開きます。
|
popover.open(animate) | Popoverの作成時に渡されたターゲット要素の周りにPopoverを開きます。
|
popover.close(animate) | Popoverを閉じます。
|
popover.destroy() | Popoverを破棄します。 |
popover.on(event, handler) | イベントハンドラを追加します。 |
popover.once(event, handler) | 発火後に削除されるイベントハンドラを追加します。 |
popover.off(event, handler) | イベントハンドラを削除します。 |
popover.off(event) | 指定されたイベントのすべてのハンドラを削除します。 |
popover.emit(event, ...args) | インスタンスでイベントを発火します。 |
リンクによるPopoverの制御
特別なクラスとデータ属性を使用してリンクを介して必要なPopover(DOMにある場合)を開閉できます。
Popoverを開くには、任意のHTML要素(リンクが推奨)に「popover-open」クラスを追加する必要があります。
Popoverを閉じるには、任意のHTML要素(リンクが推奨)に「popover-close」クラスを追加する必要があります。
DOMに複数のPopoverがある場合は、このHTML要素に追加のdata-popover=".my-popover"属性を介して適切なPopoverを指定する必要があります。
上記の注意によると
<!-- In data-popover attribute we specify CSS selector of popover we need to open -->
<p><a href="#" data-popover=".my-popover" class="popover-open">Open Popover</a></p>
<!-- And somewhere in DOM -->
<div class="popover my-popover">
<div class="popover-inner">
<!-- Link to close popover -->
<a class="link popover-close">Close Popover</a>
</div>
</div>
Popoverイベント
Popoverは、Popover要素で次のDOMイベント、およびアプリとPopoverインスタンスでイベントを発火します。
DOMイベント
イベント | ターゲット | 説明 |
---|---|---|
popover:open | Popover要素<div class="popover"> | Popoverが開きアニメーションを開始したときにイベントがトリガーされます。 |
popover:opened | Popover要素<div class="popover"> | Popoverが開きアニメーションを完了した後にイベントがトリガーされます。 |
popover:close | Popover要素<div class="popover"> | Popoverが閉じアニメーションを開始したときにイベントがトリガーされます。 |
popover:closed | Popover要素<div class="popover"> | Popoverが閉じアニメーションを完了した後にイベントがトリガーされます。 |
アプリとPopoverインスタンスのイベント
Popoverインスタンスは、自身とアプリインスタンスの両方でイベントを発行します。アプリインスタンスのイベント名は、接頭辞popover
が付いたものになります。
イベント | 引数 | ターゲット | 説明 |
---|---|---|---|
open | popover | popover | Popoverが開きアニメーションを開始したときにイベントがトリガーされます。引数として、イベントハンドラはPopoverインスタンスを受け取ります。 |
popoverOpen | popover | app | |
opened | popover | popover | Popoverが開きアニメーションを完了した後にイベントがトリガーされます。引数として、イベントハンドラはPopoverインスタンスを受け取ります。 |
popoverOpened | popover | app | |
close | popover | popover | Popoverが閉じアニメーションを開始したときにイベントがトリガーされます。引数として、イベントハンドラはPopoverインスタンスを受け取ります。 |
popoverClose | popover | app | |
closed | popover | popover | Popoverが閉じアニメーションを完了した後にイベントがトリガーされます。引数として、イベントハンドラはPopoverインスタンスを受け取ります。 |
popoverClosed | popover | app | |
beforeDestroy | popover | popover | Popoverインスタンスが破棄される直前にイベントがトリガーされます。引数として、イベントハンドラはPopoverインスタンスを受け取ります。 |
popoverBeforeDestroy | popover | app |
CSS変数
関連するCSS変数(CSSカスタムプロパティ)のリストを以下に示します。
:root {
--f7-popover-width: 260px;
}
.ios {
--f7-popover-border-radius: 13px;
--f7-popover-actions-icon-size: 28px;
--f7-popover-transition-timing-function: initial;
--f7-popover-bg-color: rgba(255, 255, 255, 0.95);
--f7-popover-actions-label-text-color: rgba(0, 0, 0, 0.45);
}
.ios .dark,
.ios.dark {
--f7-popover-bg-color: rgba(30, 30, 30, 0.95);
--f7-popover-actions-label-text-color: rgba(255, 255, 255, 0.55);
}
.md {
--f7-popover-transition-timing-function: cubic-bezier(0, 0.8, 0.34, 1);
--f7-popover-border-radius: 28px;
--f7-popover-actions-icon-size: 24px;
}
.md,
.md .dark,
.md [class*='color-'] {
--f7-popover-bg-color: var(--f7-md-surface-3);
--f7-popover-actions-label-text-color: var(--f7-md-on-surface-variant);
}
例
<div class="page">
<div class="navbar">
<div class="navbar-bg"></div>
<div class="navbar-inner sliding">
<div class="title">Popover</div>
<div class="right">
<a class="link popover-open" data-popover=".popover-menu">Popover</a>
</div>
</div>
</div>
<div class="toolbar toolbar-bottom">
<div class="toolbar-inner">
<a href="" class="link popover-open" data-popover=".popover-menu">Dummy Link</a>
<a href="" class="link popover-open" data-popover=".popover-menu">Open Popover</a>
</div>
</div>
<div class="page-content">
<div class="block">
<p><a data-popover=".popover-menu" class="button button-fill popover-open">Open popover on me</a></p>
<p>Mauris fermentum neque et luctus venenatis. Vivamus a sem rhoncus, ornare tellus eu, euismod mauris. In porta
turpis at semper convallis. Duis adipiscing leo eu nulla lacinia, quis rhoncus metus condimentum. Etiam nec
malesuada nibh. Maecenas quis lacinia nisl, vel posuere dolor. Vestibulum condimentum, nisl ac vulputate
egestas, neque enim dignissim elit, rhoncus volutpat magna enim a est. Aenean sit amet ligula neque. Cras
suscipit rutrum enim. Nam a odio facilisis, elementum tellus non, <a class="popover-open"
data-popover=".popover-menu">popover</a> tortor. Pellentesque felis eros, dictum vitae lacinia quis, lobortis
vitae ipsum. Cras vehicula bibendum lorem quis imperdiet.</p>
<p>In hac habitasse platea dictumst. Etiam varius, ante vel ornare facilisis, velit massa rutrum dolor, ac porta
magna magna lacinia nunc. Curabitur <a class="popover-open" data-popover=".popover-menu">popover!</a> cursus
laoreet. Aenean vel tempus augue. Pellentesque in imperdiet nibh. Mauris rhoncus nulla id sem suscipit volutpat.
Pellentesque ac arcu in nisi viverra pulvinar. Nullam nulla orci, bibendum sed ligula non, ullamcorper iaculis
mi. In hac habitasse platea dictumst. Praesent varius at nisl eu luctus. Cras aliquet porta est. Quisque
elementum quis dui et consectetur. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
ridiculus mus. Sed sed laoreet purus. Pellentesque eget ante ante.</p>
<p>Duis et ultricies nibh. Sed facilisis turpis urna, ac imperdiet erat venenatis eu. Proin sit amet faucibus
tortor, et varius sem. Etiam vitae lacinia neque. Aliquam nisi purus, interdum in arcu sed, ultrices rutrum
arcu. Nulla mi turpis, consectetur vel enim quis, facilisis viverra dui. Aliquam quis convallis tortor, quis
semper ligula. Morbi ullamcorper <a class="popover-open" data-popover=".popover-menu">one more popover</a> massa
at accumsan. Etiam purus odio, posuere in ligula vitae, viverra ultricies justo. Vestibulum nec interdum nisi.
Aenean ac consectetur velit, non malesuada magna. Sed pharetra vehicula augue, vel venenatis lectus gravida
eget. Curabitur lacus tellus, venenatis eu arcu in, interdum auctor nunc. Nunc non metus neque. Suspendisse
viverra lectus sed risus aliquet, vel accumsan dolor feugiat.</p>
</div>
</div>
<div class="popover popover-menu">
<div class="popover-angle"></div>
<div class="popover-inner">
<div class="list">
<ul>
<li><a href="/dialog/" class="list-button popover-close">Dialog</a></li>
<li><a href="/tabs/" class="list-button popover-close">Tabs</a></li>
<li><a href="/panel/" class="list-button popover-close">Side Panels</a></li>
<li><a href="/list/" class="list-button popover-close">List View</a></li>
<li><a href="/inputs/" class="list-button popover-close">Form Inputs</a></li>
</ul>
</div>
</div>
</div>
</div>