ダイアログ
ダイアログは、アプリのメインコンテンツの上にポップアップする小さなコンテンツペインです。ダイアログは通常、ユーザーに何かを尋ねたり、ユーザーに通知したり警告したりするために使用されます。ダイアログは、他のすべてのモーダルと同様に、いわゆる「一時的な表示」の一部です。
ダイアログは、JavaScriptを使用してのみ開くことができます。そこで、ダイアログを扱う関連アプリのメソッドを見てみましょう。
ダイアログアプリのメソッド
ダイアログを扱うアプリの関連メソッドを見てみましょう。
app.dialog.create(parameters)- ダイアログのインスタンスを作成する
- parameters - object. ダイアログのパラメータを持つオブジェクト
作成されたDialogのインスタンスを返すメソッド
app.dialog.destroy(el)- ダイアログインスタンスの破棄
- el - HTMLElement または string (CSSセレクタ付き) または object. 壊すDialog要素またはDialogインスタンスです。
app.dialog.get(el)- HTML要素によるDialogインスタンスの取得
- el - HTMLElement または string (with CSS Selector). Dialogの要素です。
メソッドはDialogのインスタンスを返します
app.dialog.open(el, animate)- ダイアログを開く
- el - HTMLElement または string (with CSS Selector)。開くダイアログの要素
- animate - boolean。ダイアログをアニメーションで開きます。
メソッドはDialogのインスタンスを返します。
app.dialog.close(el, animate)- ダイアログを閉じる
- el - HTMLElementまたはstring(CSSセレクタ付き)を指定します。ダイアログの要素を閉じる。
- animate - boolean。アニメーションでDialogを閉じます。
メソッドはDialogのインスタンスを返します。
ダイアログのパラメータ
それでは、ダイアログを作成するために必要な、利用可能なパラメータのリストを見てみましょう。
Parameter | Type | Default | Description |
---|---|---|---|
el | HTMLElement string | Dialog要素です。HTMLにすでにDialog要素があり、この要素を使って新しいインスタンスを作成したい場合に便利です。 | |
containerEl | HTMLElement string | アプリのルート要素(app.el )ではなく、カスタム要素にダイアログをマウントすることができます。 | |
backdrop | boolean | true | ダイアログの背景を有効にします (背後にある暗い半透明のレイヤー)。 |
closeByBackdropClick | boolean | false | 有効にすると、背景をクリックするとダイアログが閉じます。 |
animate | boolean | true | ダイアログの開閉をアニメーションで行うかどうか。.open()と .close()`メソッドで上書きすることができます。 |
title | string | ダイアログのタイトル | |
text | string | ダイアログの内側のテキスト | |
content | string | ダイアログテキストに続くカスタムダイアログのコンテンツ。任意のHTMLコンテンツを受け入れることができます。 | |
buttons | array | [] | ダイアログボタンの配列で、各ボタンは ボタンのパラメータを持つオブジェクトです。 |
verticalButtons | boolean | false | 垂直方向のボタンレイアウトを有効にする |
destroyOnClose | boolean | false | 有効にすると、閉じたときにダイアログを自動的に破棄します |
onClick | function(dialog, index) | ダイアログボタンをクリックした後に実行されるコールバック関数です。引数として、ダイアログのインスタンスとクリックされたボタンのインデックス番号を受け取ります。 | |
cssClass | string | 追加するcssクラス | |
on | object | イベントハンドラーを持つオブジェクトです。例えば、以下のようになります。
|
ボタンのパラメータ
配列 buttons
に含まれる各ボタンは、ボタンのパラメータを持つオブジェクトとして表示されなければなりません。
Parameter | Type | Default | Description |
---|---|---|---|
text | string | ボタンのテキストを表す文字列 (HTML文字列でも可) | |
bold | boolean | false | ボタンのテキストを太字にします。 |
color | string | ボタンの色。デフォルトの色のうちのひとつです。 | |
close | boolean | true | 有効な場合、ボタンをクリックするとダイアログを閉じます |
cssClass | string | 追加のボタン CSS クラス | |
keyCodes | array | [] | ボタンをクリックしたときに使用されるキーボードのキーコードを配列で指定します。例えば、キーコード13 は、Enterキーを押したときにボタンがクリックされることを意味します。 |
onClick | function(dialog, e) | このボタンをクリックした後に実行されるコールバック関数 |
ダイアログのメソッドとプロパティ
ダイアログを作成するためには、コールを行わなければなりません。
var dialog = app.dialog.create({ /* parameters */ })
その後、有用なメソッドとプロパティを持つ、初期化されたインスタンス(上記の例では dialog
変数)を取得します。
Properties | |
---|---|
dialog.app | グローバルアプリのインスタンスへのリンク |
dialog.el | ダイアログ HTML 要素 |
dialog.$el | ダイアログを持つ Dom7 インスタンス HTML 要素 |
dialog.backdropEl | 背景のHTML要素 |
dialog.$backdropEl | 背景のHTML要素を持つDom7インスタンス |
dialog.params | ダイアログパラメータ |
dialog.opened | ダイアログを開くかどうかを示すブール値のプロップ |
Methods | |
dialog.open(animate) | ダイアログを開く。ここでは
|
dialog.close(animate) | ダイアログを閉じます。ダイアログを閉じる
|
dialog.setProgress(progress, duration) | ダイアログプログレスのショートカットが使用されている場合、ダイアログの進行状況を設定します。
|
dialog.setTitle(title) | ダイアログのタイトルを設定
|
dialog.setText(text) | ダイアログのテキストを設定
|
dialog.destroy() | ダイアログの破棄 |
dialog.on(event, handler) | イベントハンドラの追加 |
dialog.once(event, handler) | 発射された後に削除されるイベントハンドラの追加 |
dialog.off(event, handler) | イベントハンドラの削除 |
dialog.off(event) | 指定されたイベントのハンドラをすべて削除する |
dialog.emit(event, ...args) | インスタンスでのイベント発生 |
ダイアログのイベント
ダイアログは、以下のDOMイベントをダイアログ要素に、イベントをアプリとダイアログインスタンスに発行します。
DOMイベント
Event | Target | Description |
---|---|---|
dialog:open | Dialog Element<div class="dialog"> | ダイアログがオープニングアニメーションを開始するとイベントが発生します。 |
dialog:opened | Dialog Element<div class="dialog"> | イベントは、ダイアログがそのオープニングアニメーションを完了した後に発生します。 |
dialog:close | Dialog Element<div class="dialog"> | イベントは、ダイアログが閉じるアニメーションを開始したときに発生します。 |
dialog:closed | Dialog Element<div class="dialog"> | イベントはダイアログが閉じるアニメーションを完了した後に発生します。 |
dialog:beforedestroy | Dialog Element<div class="dialog"> | イベントはダイアログインスタンスが破壊される直前に発生します。 |
アプリとダイアログインスタンスのイベント
ダイアログインスタンスはセルフインスタンスとアプリインスタンスの両方にイベントを発行します。アプリインスタンスのイベントは、同じ名前でプレフィックスとして dialog
が付きます。
Event | Arguments | Target | Description |
---|---|---|---|
open | dialog | dialog | イベントは、ダイアログがそのオープニングアニメーションを開始するときにトリガされます。引数としてイベントハンドラはダイアログインスタンスを受け取ります。 |
dialogOpen | dialog | app | |
opened | dialog | dialog | イベントはダイアログがそのオープニングアニメーションを完了した後にトリガされます。As an argument event handler receive dialog instance |
dialogOpened | dialog | app | |
close | dialog | dialog | ダイアログが閉じるアニメーションを開始するとイベントが発生します。As an argument event handler receive dialog instance |
dialogClose | dialog | app | |
closed | dialog | dialog | イベントはDialogが閉じるアニメーションを完了した後に発生します。As an argument event handler receive dialog instance |
dialogClosed | dialog | app | |
beforeDestroy | dialog | dialog | イベントはDialogインスタンスが破壊される直前に発生します。ダイアログインスタンスを受け取るイベントハンドラの引数として |
dialogBeforeDestroy | dialog | app |
ダイアログのショートカット
ダイアログの作成をはるかに容易にするいくつかのショートカットメソッドがあります。
最初に、そのようなショートカットの設定を助け、ローカリゼーションの目的にも使用される、アプリのグローバルパラメータを確認しましょう。
ダイアログのショートカットのパラメータ
以下のグローバルダイアログショートカットパラメータは、アプリの初期化において、dialog
プロパティで渡すことができます。
var app = new Framework7({
dialog: {
// すべてのダイアログショートカットのデフォルトタイトルを設定する
title: 'My App',
// デフォルトの "OK "ボタンのテキストを変更
buttonOk: 'Done',
...
}
});
Parameter | Type | Default | Description |
---|---|---|---|
title | string | ダイアログのショートカットのデフォルトのタイトルです。指定されていない場合は、app.name と同じになります。 | |
buttonOk | string | OK | デフォルトの "OK "ボタンのテキスト |
buttonCancel | string | Cancel | デフォルトの "Cancel "ボタンのテキスト |
usernamePlaceholder | string | Username | ログインダイアログのデフォルトのユーザー名フィールドのプレースホルダー |
passwordPlaceholder | string | Password | Login & Passwordダイアログでのデフォルトのパスワードフィールドのプレースホルダー |
preloaderTitle | string | Loading... | Preloaderダイアログのデフォルトのタイトル |
progressTitle | string | Loading... | Progressダイアログのデフォルトのタイトル |
destroyPredefinedDialogs | boolean | true | 終了時にすべての定義済みダイアログ(Alert、Confirm、Promptなど)を自動的に破棄する。 |
keyboardActions | boolean | true | 定義済みのダイアログ(Alert、Confirm、Prompt、Login、Password)の "Ok "および "Cancel "ボタンのキーボードショートカット(EnterおよびEsc)を有効にする。 |
autoFocus | boolean | true | 有効にすると、ダイアログオープン時にダイアログ入力をオートフォーカスします。Prompt、Login、Passwordなどの入力項目がある定義済みのダイアログでのみ有効です。 |
ここで、利用可能なダイアログのショートカットを見てみましょう。
アラート
アラートダイアログを作成するには、以下のアプリのメソッドを使用する必要があります。
app.dialog.alert(text, title, callback)- アラートダイアログを作成し、それを開く
- text - string. アラートダイアログのテキスト
- title - string. アラートダイアログのタイトル
- callback - function。オプションです。ユーザーがアラートボタンをクリックした後に実行されるコールバック関数
メソッドは作成されたダイアログのインスタンスを返します。
app.dialog.alert(text, callback)- デフォルトのタイトルでアラートダイアログを作成し、それを開く
メソッドは作成されたダイアログのインスタンスを返します
確認
確認ダイアログは、通常、何らかのアクションを確認する必要があるときに使用されます。確認モーダルを開くには、以下のAppメソッドの1つを呼び出す必要があります。
app.dialog.confirm(text, title, callbackOk, callbackCancel)- 確認ダイアログを作成し、それを開く
- text - string. 確認ダイアログのテキスト
- title - string. 確認ダイアログのタイトル
- callbackOk - function。オプションです。ユーザーが確認ダイアログの「Ok」ボタンをクリックしたときに実行されるコールバック関数(ユーザーがアクションを確認したとき)。
- callbackCancel - function。任意です。ユーザーが確認ダイアログの "Cancel "ボタンをクリックしたときに実行されるコールバック関数 (ユーザーがアクションを解除したとき)
メソッドは作成されたダイアログのインスタンスを返します
app.dialog.confirm(text, callbackOk, callbackCancel)- デフォルトのタイトルで確認ダイアログを作成し、それを開きます
メソッドは作成されたダイアログのインスタンスを返します。
プロンプト
プロンプトダイアログは、ユーザーから何らかのデータや回答を得る必要がある場合に使用されます。プロンプトダイアログを開くには、以下のAppメソッドのいずれかを呼び出す必要があります。
app.dialog.prompt(text, title, callbackOk, callbackCancel, defaultValue)- プロンプトダイアログを作成し、それを開く
- text - string. プロンプトダイアログのテキスト
- title - string. プロンプトダイアログのタイトル
- callbackOk - function(value)。オプションです。プロンプトダイアログでユーザーが「Ok」ボタンをクリックしたときに実行されるコールバック関数です。この関数は、テキスト入力の値を引数として受け取ります。
- callbackCancel - function(value)。オプションです。プロンプトダイアログの「キャンセル」ボタンをクリックしたときに実行されるコールバック関数です。引数として、テキスト入力の値を受け取ります。
- defaultValue - string。任意です。プロンプト入力のデフォルト値
app.dialog.prompt(text, callbackOk, callbackCancel, defaultValue)- プロンプトダイアログをデフォルトのタイトルで作成し、それを開きます。
メソッドは作成されたダイアログのインスタンスを返します
ログイン
app.dialog.login(text, title, callbackOk, callbackCancel)- ログインダイアログを作成し、それを開く
- text - string. ログインダイアログのテキスト
- title - string. ログインダイアログのタイトル
- callbackOk - function(username, password)。オプションです。ユーザーがログインダイアログの「Ok」ボタンをクリックしたときに実行されるコールバック関数です。引数として、ユーザー名とパスワードの値を受け取ります。
- callbackCancel - function(username, password)。オプションです。ユーザーがLoginダイアログの "Cancel "ボタンをクリックしたときに実行されるコールバック関数。引数として、ユーザー名とパスワードの値を受け取ります。
app.dialog.login(text, callbackOk, callbackCancel)- デフォルトのタイトルでログインダイアログを作成し、それを開きます。
メソッドは作成されたダイアログのインスタンスを返します。
パスワード
パスワードダイアログは、パスワードのみを要求する必要がある場合に便利です。
app.dialog.password(text, title, callbackOk, callbackCancel)- パスワードダイアログを作成し、それを開きます
- text - string. パスワードダイアログのテキスト
- title - string. パスワードダイアログのタイトル
- callbackOk - function(password)。オプションです。ユーザーがパスワードダイアログの「Ok」ボタンをクリックしたときに実行されるコールバック関数です。引数として、パスワードの値を受け取ります。
- callbackCancel - function(password)。オプションです。パスワードダイアログの "Cancel "ボタンをクリックしたときに実行されるコールバック関数。引数関数として、パスワードの値を受け取ります。
app.dialog.password(text, callbackOk, callbackCancel)- デフォルトのタイトルでパスワードダイアログを作成し、それを開く
メソッドは作成されたダイアログのインスタンスを返します
プリローダー
プリローダーダイアログは、(Ajaxリクエストのような)バックグラウンドアクティビティを示し、このアクティビティ中のユーザーのアクションをブロックするために使用されます。プレローダダイアログを開くには、適切なAppメソッドを呼び出す必要があります。
app.dialog.preloader(title, color)- プリローダダイアログを作成し、それを開く
- title - string。任意です。プリローダダイアログのタイトル
- color - 文字列を指定します。任意です。プレローダの色。デフォルトの色のいずれかです。
メソッドは作成されたダイアログのインスタンスを返します
進捗状況
Preloaderダイアログと同じですが、preloaderの代わりにprogressbarがあります。
app.dialog.progress(title, progress, color)- Progressダイアログを作成し、それを開く
- title - string。任意です。プログレスダイアログのタイトル
- progress - 数字。任意です。プログレスバーの進行状況 (0から100まで)。数字がない場合、プログレスバーは無限大になります。
- color - string。任意です。プログレスバーの色。デフォルトカラーのうちのひとつです。
作成されたダイアログのインスタンスを返すメソッド
CSS Variables
Below is the list of related CSS variables (CSS custom properties).
Note that commented variables are not specified by default and their values is what they fallback to in this case.
:root {
--f7-dialog-button-text-color: var(--f7-theme-color);
--f7-dialog-button-text-align: center;
--f7-dialog-input-bg-color: #fff;
}
:root .theme-dark,
:root.theme-dark {
--f7-dialog-text-color: #fff;
}
.ios {
--f7-dialog-box-shadow: none;
--f7-dialog-width: 270px;
--f7-dialog-inner-padding: 16px;
--f7-dialog-border-radius: 13px;
--f7-dialog-text-align: center;
--f7-dialog-font-size: 14px;
--f7-dialog-title-text-color: inherit;
--f7-dialog-title-font-size: 18px;
--f7-dialog-title-font-weight: 600;
--f7-dialog-title-line-height: inherit;
--f7-dialog-button-font-size: 17px;
--f7-dialog-button-height: 44px;
--f7-dialog-button-letter-spacing: 0;
--f7-dialog-button-font-weight: 400;
--f7-dialog-button-text-transform: none;
--f7-dialog-input-border-radius: 4px;
--f7-dialog-input-font-size: 14px;
--f7-dialog-input-height: 32px;
--f7-dialog-input-border-width: 1px;
--f7-dialog-input-placeholder-color: #a9a9a9;
--f7-dialog-preloader-size: 34px;
--f7-dialog-bg-color: rgba(255, 255, 255, 0.95);
--f7-dialog-bg-color-rgb: 255, 255, 255;
--f7-dialog-text-color: #000;
--f7-dialog-button-pressed-bg-color: rgba(0, 0, 0, 0.1);
--f7-dialog-input-border-color: rgba(0, 0, 0, 0.3);
--f7-dialog-border-divider-color: rgba(0, 0, 0, 0.2);
}
.ios .theme-dark,
.ios.theme-dark {
--f7-dialog-bg-color: rgba(45, 45, 45, 0.95);
--f7-dialog-bg-color-rgb: 45, 45, 45;
--f7-dialog-button-pressed-bg-color: rgba(0, 0, 0, 0.2);
--f7-dialog-border-divider-color: rgba(255, 255, 255, 0.15);
--f7-dialog-input-border-color: rgba(255, 255, 255, 0.15);
--f7-dialog-input-bg-color: rgba(0, 0, 0, 0.5);
}
.md {
--f7-dialog-box-shadow: var(--f7-elevation-24);
--f7-dialog-width: 280px;
--f7-dialog-inner-padding: 24px;
--f7-dialog-border-radius: 4px;
--f7-dialog-text-align: left;
--f7-dialog-font-size: 16px;
--f7-dialog-title-font-size: 20px;
--f7-dialog-title-font-weight: 500;
--f7-dialog-title-line-height: 1.3;
--f7-dialog-button-font-size: 14px;
--f7-dialog-button-height: 36px;
--f7-dialog-button-letter-spacing: 0.05em;
--f7-dialog-button-font-weight: 500;
--f7-dialog-button-text-transform: uppercase;
--f7-dialog-button-pressed-bg-color: rgba(var(--f7-theme-color-rgb), 0.15);
--f7-dialog-input-border-radius: 0px;
--f7-dialog-input-font-size: 16px;
--f7-dialog-input-height: 36px;
--f7-dialog-input-border-color: transparent;
--f7-dialog-input-border-width: 0px;
--f7-dialog-preloader-size: 32px;
--f7-dialog-bg-color: #fff;
--f7-dialog-text-color: rgba(0, 0, 0, 0.54);
--f7-dialog-title-text-color: #212121;
--f7-dialog-input-placeholder-color: rgba(0, 0, 0, 0.35);
}
.md .theme-dark,
.md.theme-dark {
--f7-dialog-bg-color: #1c1c1d;
--f7-dialog-title-text-color: #fff;
--f7-dialog-input-bg-color: transparent;
--f7-dialog-input-placeholder-color: rgba(255, 255, 255, 0.54);
}
.aurora {
--f7-dialog-box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.15), 0 25px 30px 0 rgba(0,0,0,0.35);
--f7-dialog-width: 300px;
--f7-dialog-inner-padding: 20px;
--f7-dialog-border-radius: 8px;
--f7-dialog-text-align: left;
--f7-dialog-font-size: 14px;
--f7-dialog-title-font-size: 18px;
--f7-dialog-title-font-weight: 700;
--f7-dialog-title-line-height: inherit;
--f7-dialog-button-font-size: 14px;
--f7-dialog-button-height: 36px;
--f7-dialog-button-letter-spacing: 0;
--f7-dialog-button-font-weight: 600;
--f7-dialog-button-text-transform: uppercase;
/*
--f7-dialog-button-pressed-bg-color: var(--f7-theme-color-shade);
--f7-dialog-button-hover-bg-color: var(--f7-theme-color-tint);
*/
--f7-dialog-input-border-radius: 8px;
--f7-dialog-input-font-size: 16px;
--f7-dialog-input-height: 32px;
--f7-dialog-input-border-width: 1px;
--f7-dialog-preloader-size: 24px;
--f7-dialog-bg-color: #fff;
--f7-dialog-title-text-color: inherit;
--f7-dialog-text-color: #000;
--f7-dialog-button-text-color: #fff;
--f7-dialog-input-border-color: rgba(0, 0, 0, 0.2);
--f7-dialog-input-placeholder-color: rgba(0, 0, 0, 0.32);
}
.aurora .theme-dark,
.aurora.theme-dark {
--f7-dialog-bg-color: #1c1c1d;
--f7-dialog-title-text-color: #fff;
--f7-dialog-input-bg-color: rgba(0, 0, 0, 0.25);
--f7-dialog-input-placeholder-color: rgba(255, 255, 255, 0.54);
--f7-dialog-input-border-color: rgba(255, 255, 255, 0.15);
}
Examples
<template>
<div class="page">
<div class="navbar">
<div class="navbar-bg"></div>
<div class="navbar-inner">
<div class="title">Dialog</div>
</div>
</div>
<div class="page-content">
<div class="block block-strong">
<p class="row">
<button class="col button button-fill open-alert">Alert</button>
<button class="col button button-fill open-confirm">Confirm</button>
<button class="col button button-fill open-prompt">Prompt</button>
</p>
<p class="row">
<button class="col button button-fill open-login">Login</button>
<button class="col button button-fill open-password">Password</button>
</p>
</div>
<div class="block-title">Vertical Buttons</div>
<div class="block block-strong">
<p>
<button class="button button-fill open-vertical">Vertical Buttons</button>
</p>
</div>
<div class="block-title">Preloader Dialog</div>
<div class="block block-strong">
<p class="row">
<button class="col button button-fill open-preloader">Preloader</button>
<button class="col button button-fill open-preloader-custom">Custom Title</button>
</p>
</div>
<div class="block-title">Progress Dialog</div>
<div class="block block-strong">
<p class="row">
<button class="col button button-fill open-progress">Determined</button>
<button class="col button button-fill open-progress-infinite">Infinite</button>
</p>
</div>
</div>
</div>
</template>
<script>
export default (props, { $, $f7, $on }) => {
$on('pageInit', () => {
// Alert
$('.open-alert').on('click', function () {
$f7.dialog.alert('Hello');
});
// Confirm
$('.open-confirm').on('click', function () {
$f7.dialog.confirm('Are you feel good today?', function () {
$f7.dialog.alert('Great!');
});
});
// Prompt
$('.open-prompt').on('click', function () {
$f7.dialog.prompt('What is your name?', function (name) {
$f7.dialog.confirm('Are you sure that your name is ' + name + '?', function () {
$f7.dialog.alert('Ok, your name is ' + name);
});
});
});
// Login
$('.open-login').on('click', function () {
$f7.dialog.login('Enter your username and password', function (username, password) {
$f7.dialog.alert('Thank you!<br>Username:' + username + '<br>Password:' + password);
});
});
// Password
$('.open-password').on('click', function () {
$f7.dialog.password('Enter your password', function (password) {
$f7.dialog.alert('Thank you!<br>Password:' + password);
});
});
// Vertical Buttons
$('.open-vertical').on('click', function () {
$f7.dialog.create({
title: 'Vertical Buttons',
text: 'Dialog with vertical buttons',
buttons: [
{
text: 'Button 1',
},
{
text: 'Button 2',
},
{
text: 'Button 3',
},
],
verticalButtons: true,
}).open();
});
// Preloader
$('.open-preloader').on('click', function () {
$f7.dialog.preloader();
setTimeout(function () {
$f7.dialog.close();
}, 3000);
});
// Preloader with custom text
$('.open-preloader-custom').on('click', function () {
$f7.dialog.preloader('My text...');
setTimeout(function () {
$f7.dialog.close();
}, 3000);
});
// Progress
$('.open-progress').on('click', function () {
var progress = 0;
var dialog = $f7.dialog.progress('Loading assets', progress);
dialog.setText('Image 1 of 10');
var interval = setInterval(function () {
progress += 10;
dialog.setProgress(progress);
dialog.setText('Image ' + ((progress) / 10) + ' of 10');
if (progress === 100) {
clearInterval(interval);
dialog.close();
}
}, 300)
});
// Progress Infinite
$('.open-progress-infinite').on('click', function () {
$f7.dialog.progress();
setTimeout(function () {
$f7.dialog.close();
}, 3000);
});
})
return $render;
}
</script>