アクションシート
アクションシートは、与えられたタスクをどのように進めるかの選択肢をユーザーに提示するためのスライドアップペインです。
また、アクションシートを使用して、危険な可能性のあるアクションの確認をユーザーに促すこともできます。
アクションシートには任意のタイトルと1つ以上のボタンがあり、それぞれが取るべきアクションに対応しています。
なお、アクションシートを大画面(iPad)で使用することはお勧めできません。大きな画面では、Popoverを代わりに使用してください。
アクションシートのアプリ・メソッド
アクションシートに関連するアプリのメソッドをご紹介します。
app.actions.create(parameters)- Action Sheetインスタンスの作成
- parameters - object. アクションシートのパラメータを持つオブジェクト
作成したアクションシートのインスタンスを返すメソッド
app.actions.destroy(el)- アクションシートのインスタンスを破棄する
- el - HTMLElementまたはstring(CSSセレクタ付き)またはobject。破壊するアクション要素のインスタンスです。
app.actions.get(el)- HTML要素でアクションシートのインスタンスを取得
- el - HTMLElement または string (CSSセレクタを使用)。アクションシートの要素です。
メソッドは、アクションシートのインスタンスを返します
app.actions.open(el, animate)- アクションシートを開く
- el - HTMLElementまたはstring(CSSセレクタ付き)のアクションシート要素。開くアクションシートの要素
- animate - boolean:アクションシートを開きます。アニメーション付きのアクションシートを開きます。
メソッドはアクションシートのインスタンスを返します。
app.actions.close(el, animate)- アクションシートを閉じる
- el - HTMLElementまたはstring(CSSセレクタ付き)。アクションシートの要素を閉じます。
- animate - boolean。アニメーションでアクションシートを閉じます。
メソッドはアクションシートのインスタンスを返します。
アクションシートのパラメータ
それでは、アクションシートを作成するために必要な、利用可能なパラメータの一覧を見てみましょう。
Parameter | Type | Default | Description |
---|---|---|---|
el | HTMLElement string | アクションシート要素 すでにHTML内にアクションシート要素があり、この要素を使って新しいインスタンスを作成したい場合に便利です。 | |
content | string | Full Action Sheet HTML content string. カスタムHTMLでアクションシート要素を作成したい場合に便利です。 | |
backdrop | boolean | true | アクションシートの背景を有効にする(背後の暗い半透明のレイヤー |
backdropEl | HTMLElement string | HTML 要素または文字列 カスタム背景要素の CSS セレクタ | |
closeByBackdropClick | boolean | true | 有効にすると、背景をクリックするとアクションシートが閉じられます。 |
closeByOutsideClick | boolean | false | 有効にすると、アクションシートはその外側をクリックすると閉じます。 |
closeOnEscape | boolean | false | 有効にすると、ESCキーを押したときにアクションシートが閉じます。 |
animate | boolean | true | アクションシートの開閉をアニメーションで行うかどうかを指定します。.open()と .close()`メソッドで上書きすることができます。 |
buttons | array | アクションシートのグループ/ボタン。この場合、アクションレイアウトは、渡されたグループとボタンに基づいて動的に生成されます。グループの場合は、各アイテムがグループのボタンを持つ配列を表すような配列になります。 | |
grid | boolean | false | グリッドボタンのレイアウトを有効にする |
convertToPopover | boolean | true | 有効にすると、大画面やAuroraテーマを使用したデスクトップデバイスでは、アクションシートがPopoverに変換されます。 |
forceToPopover | boolean | false | 有効にすると、アクションシートは常にPopoverに変換されます。 |
targetEl | HTMLElement string | HTML 要素または文字列 対象要素の CSS セレクタです。ポップオーバーへの変換が使用されている場合は必須 | |
targetX | number | 仮想ターゲット要素の画面左端からの水平方向のオフセット。実際のターゲット要素(targetEl )を使用せずに、ポップオーバーへの変換を使用する場合に必要です。 | |
targetY | number | 仮想目標要素の画面上部からの垂直方向のオフセットです。real target element (targetEl )を使用せずにpopoverへの変換を使用する場合に必要です。 | |
targetWidth | number | 0 | 仮想ターゲット要素の幅(px)を指定します。real target element (targetEl ) を使用せずに popover への変換を使用する場合に必要です。 |
targetHeight | number | 0 | 仮想的なターゲット要素の高さ (px)。実際のターゲット要素 (targetEl ) を使わずに popover への変換を行う場合に必要です。 |
cssClass | string | アクションシート要素に設定される追加のCSSクラス名です。 | |
onClick | function(actions, e) | アクションシートのボタンをクリックした後に実行されるコールバック関数 | |
render | function | アクションシートをレンダリングするカスタム関数。アクションシートのhtmlを返さなければなりません。 | |
renderPopover | function | ポップオーバーへの変換が使用されている場合に、ポップオーバーをレンダリングするカスタム関数です。ポップオーバーのhtmlを返さなければならない。 | |
on | object | イベントハンドラーを持つオブジェクト。例えば、以下のようになります。
|
以下のパラメータは、すべてのアクションシートのデフォルトを設定するために、actions
プロパティのグローバルアプリのパラメータで使用できることに注意してください。例えば、以下のようなものがあります。
var app = new Framework7({
actions: {
convertToPopover: false,
grid: true,
}
});
ボタンのパラメータ
配列 buttons
の各ボタンは、ボタンのパラメータを持つオブジェクトとして提示されなければなりません。
Parameter | Type | Default | Description |
---|---|---|---|
text | string | ボタンのテキストの文字列 (HTML文字列でも可) | |
icon | string | アイコンのHTML文字列 | |
bold | boolean | false | ボタンのテキストを太字にするかどうか |
color | string | ボタンの色(デフォルトカラーのひとつ | |
bg | string | ボタンの背景色(デフォルトの色の一つ | |
label | boolean | false | 有効にすると、ボタンではなくラベルとして表示されます。 |
disabled | boolean | false | ボタンを無効にするかどうかを定義します。 |
close | boolean | true | 有効な場合、ボタンをクリックするとアクションシートを閉じます。 |
onClick | function(actions, e) | このボタンをクリックした後に実行されるコールバック関数 |
アクションシートのメソッドとプロパティ
アクションシートを作成するには、コールバック関数を呼び出す必要があります。
var actions = app.actions.create({ /* parameters */ })
その後、初期化されたインスタンス(上記の例では actions
という変数)に、便利なメソッドとプロパティを設定します。
Properties | |
---|---|
actions.app | グローバルアプリのインスタンスへのリンク |
actions.el | アクションシートのHTML要素 |
actions.$el | アクションシートのHTML要素を持つDom7インスタンス |
actions.backdropEl | 背景のHTML要素 |
actions.$backdropEl | 背景のHTML要素を持つDom7のインスタンス |
actions.params | アクションシートのインスタンスパラメータ |
actions.opened | アクションシートを開くかどうかを示すブール値のプロップ |
Methods | |
actions.open(animate) | アクションシートを開きます。ここでは
|
actions.close(animate) | アクションシートを閉じます。アクションシートを閉じる
|
actions.destroy() | アクションシートの破棄 |
actions.on(event, handler) | イベントハンドラの追加 |
actions.once(event, handler) | イベントハンドラーを追加します。追加したイベントハンドラーは起動後に削除されます。 |
actions.off(event, handler) | イベントハンドラの削除 |
actions.off(event) | 指定されたイベントのハンドラをすべて削除します |
actions.emit(event, ...args) | インスタンスでイベントを発生させる |
リンクによるアクションシートの制御
リンクの特別なクラスとデータ属性を使って、(DOMにアクションシートがある場合)必要なアクションシートを開いたり閉じたりすることができます。
アクションシートを開くには、"actions-open"クラスを任意のHTML要素に追加する必要があります(リンクが望ましい)。
アクションシートを閉じるには、"actions-close"クラスを任意のHTML要素に追加する必要があります(リンクが望ましい)。
もしDOMに複数のアクションシートがある場合は、このHTML要素にdata-actions=".my-actions"属性を追加して、適切なアクションシートを指定する必要があります。
上記のメモによると
<!-- data-actions属性では、開く必要のあるアクションシートのCSSセレクタを指定します。 -->
<p><a href="#" data-actions=".my-actions" class="actions-open">Open Actions</a></p>
<!-- また、DOMのどこかで -->
<div class="actions-modal my-actions">
...
</div>
アクションシートのイベント
アクションシートでは、アクションシート要素のDOMイベント、アプリとアクションシートインスタンスのイベントが発生します。
DOMイベント
Event | Target | Description |
---|---|---|
actions:open | Action Sheet Element<div class="actions-modal"> | イベントは、アクションシートがオープニングアニメーションを開始したときに発生します。 |
actions:opened | Action Sheet Element<div class="actions-modal"> | イベントは、アクションシートがオープニングアニメーションを完了した後に発生します。 |
actions:close | Action Sheet Element<div class="actions-modal"> | アクションシートが閉じるアニメーションを開始したときにイベントが発生します。 |
actions:closed | Action Sheet Element<div class="actions-modal"> | アクションシートのクロージングアニメーションの完了後にイベントが発生する |
アプリとアクションシートインスタンスのイベント
Action Sheetインスタンスは、selfインスタンスとappインスタンスの両方でイベントを発行します。アプリインスタンスのイベントは、同じ名前でプレフィックスが actions
となっています。
Event | Arguments | Target | Description |
---|---|---|---|
open | actions | actions | イベントは、アクションシートがオープニングアニメーションを開始したときに発生します。イベントハンドラは引数としてアクションシートインスタンスを受け取ります。 |
actionsOpen | actions | app | |
opened | actions | actions | イベントは、アクションシートがそのオープニングアニメーションを完了した後にトリガーされます。As an argument event handler receives action sheet instance |
actionsOpened | actions | app | |
close | actions | actions | イベントはアクションシートのクロージングアニメーション開始時に発生します。As an argument event handler receives action sheet instance |
actionsClose | actions | app | |
closed | actions | actions | アクションシートが閉じるアニメーションを完了するとイベントが発生します。As an argument event handler receives action sheet instance |
actionsClosed | actions | app | |
beforeDestroy | actions | actions | イベントは Action Sheet のインスタンスが破棄される直前に発生します。As an argument event handler receive action sheet instance |
actionsBeforeDestroy | actions | app |
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-actions-button-text-color: var(--f7-theme-color);
*/
--f7-actions-grid-button-font-size: 12px;
--f7-actions-grid-button-text-color: #757575;
--f7-actions-grid-button-icon-size: 48px;
}
:root .theme-dark,
:root.theme-dark {
--f7-actions-label-text-color: rgba(255, 255, 255, 0.55);
}
.ios {
--f7-actions-border-radius: 13px;
--f7-actions-button-padding: 0px;
--f7-actions-button-text-align: center;
--f7-actions-button-height: 57px;
--f7-actions-button-height-landscape: 44px;
--f7-actions-button-font-size: 20px;
--f7-actions-button-icon-size: 28px;
--f7-actions-button-justify-content: center;
--f7-actions-label-padding: 8px 10px;
--f7-actions-label-font-size: 13px;
--f7-actions-label-justify-content: center;
--f7-actions-group-border-color: transparent;
--f7-actions-group-margin: 8px;
--f7-actions-bg-color: rgba(255, 255, 255, 0.95);
--f7-actions-bg-color-rgb: 255, 255, 255;
--f7-actions-button-border-color: rgba(0, 0, 0, 0.2);
--f7-actions-button-pressed-bg-color: rgba(230, 230, 230, 0.9);
--f7-actions-button-pressed-bg-color-rgb: 230, 230, 230;
--f7-actions-label-text-color: #8a8a8a;
}
.ios .theme-dark,
.ios.theme-dark {
--f7-actions-bg-color: rgba(45, 45, 45, 0.95);
--f7-actions-bg-color-rgb: 45, 45, 45;
--f7-actions-button-border-color: rgba(255, 255, 255, 0.15);
--f7-actions-button-pressed-bg-color: rgba(50, 50, 50, 0.9);
--f7-actions-button-pressed-bg-color-rgb: 50, 50, 50;
}
.md {
--f7-actions-border-radius: 0px;
--f7-actions-button-border-color: transparent;
--f7-actions-button-padding: 0 16px;
--f7-actions-button-text-align: left;
--f7-actions-button-height: 48px;
--f7-actions-button-height-landscape: 48px;
--f7-actions-button-font-size: 16px;
--f7-actions-button-icon-size: 24px;
--f7-actions-button-justify-content: space-between;
--f7-actions-label-padding: 12px 16px;
--f7-actions-label-font-size: 16px;
--f7-actions-label-justify-content: flex-start;
--f7-actions-group-margin: 0px;
--f7-actions-bg-color: #fff;
--f7-actions-button-pressed-bg-color: #e5e5e5;
--f7-actions-label-text-color: rgba(0, 0, 0, 0.54);
--f7-actions-group-border-color: rgba(0, 0, 0, 0.12);
}
.md .theme-dark,
.md.theme-dark {
--f7-actions-bg-color: #202020;
--f7-actions-button-pressed-bg-color: #2e2e2e;
--f7-actions-group-border-color: rgba(255, 255, 255, 0.15);
}
.aurora {
--f7-actions-border-radius: 8px;
--f7-actions-button-padding: 0 16px;
--f7-actions-button-text-align: center;
--f7-actions-button-height: 48px;
--f7-actions-button-height-landscape: 48px;
--f7-actions-button-font-size: 16px;
--f7-actions-button-icon-size: 24px;
--f7-actions-button-justify-content: space-between;
--f7-actions-label-padding: 10px 16px;
--f7-actions-label-font-size: 14px;
--f7-actions-label-justify-content: center;
--f7-actions-group-margin: 16px;
--f7-actions-bg-color: #fff;
--f7-actions-button-border-color: rgba(0, 0, 0, 0.12);
--f7-actions-button-pressed-bg-color: #e5e5e5;
--f7-actions-label-text-color: rgba(0, 0, 0, 0.5);
--f7-actions-group-border-color: rgba(0, 0, 0, 0.1);
}
.aurora .theme-dark,
.aurora.theme-dark {
--f7-actions-bg-color: #202020;
--f7-actions-button-border-color: rgba(255, 255, 255, 0.15);
--f7-actions-button-pressed-bg-color: #2e2e2e;
--f7-actions-group-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">Action Sheet</div>
</div>
</div>
<div class="page-content">
<div class="block">
<p>
<a href="#" class="ac-1">One group, three buttons</a>
</p>
<p>
<a href="#" class="ac-2">One group, title, three buttons</a>
</p>
<p>
<a href="#" class="ac-3">Two groups</a>
</p>
<p>
<a href="#" class="ac-4">Three groups</a>
</p>
<p>
<a href="#" class="ac-5">With callbacks on click</a>
</p>
<p>
<a href="#" class="ac-6">Actions grid</a>
</p>
</div>
</div>
</div>
</template>
<script>
export default (props, { $, $f7, $on }) => {
$on('pageInit', () => {
//- One group, three buttons
var ac1 = $f7.actions.create({
buttons: [
{
text: 'Button1',
bold: true
},
{
text: 'Button2'
},
{
text: 'Cancel',
color: 'red'
},
]
})
//- One group, title, three buttons
var ac2 = $f7.actions.create({
buttons: [
{
text: 'Do something',
label: true
},
{
text: 'Button1',
bold: true
},
{
text: 'Button2',
},
{
text: 'Cancel',
color: 'red'
},
]
});
//- Two groups
var ac3 = $f7.actions.create({
buttons: [
// First group
[
{
text: 'Do something',
label: true
},
{
text: 'Button1',
bold: true
},
{
text: 'Button2',
}
],
// Second group
[
{
text: 'Cancel',
color: 'red'
}
]
]
});
//- Three groups
var ac4 = $f7.actions.create({
buttons: [
[
{
text: 'Share',
label: true
},
{
text: 'Mail',
},
{
text: 'Messages',
}
],
[
{
text: 'Social share',
label: true
},
{
text: 'Facebook',
},
{
text: 'Twitter',
}
],
[
{
text: 'Cancel',
color: 'red'
}
]
],
});
//- With callbacks on click
var ac5 = $f7.actions.create({
buttons: [
{
text: 'Button1',
onClick: function () {
$f7.dialog.alert('Button1 clicked')
}
},
{
text: 'Button2',
onClick: function () {
$f7.dialog.alert('Button2 clicked')
}
},
{
text: 'Cancel',
color: 'red',
onClick: function () {
$f7.dialog.alert('Cancel clicked')
}
},
]
});
//- Actions Grid
var ac6 = $f7.actions.create({
grid: true,
buttons: [
[
{
text: 'Button 1',
icon: '<img src="https://cdn.framework7.io/placeholder/people-96x96-1.jpg" width="48"/>'
},
{
text: 'Button 2',
icon: '<img src="https://cdn.framework7.io/placeholder/people-96x96-2.jpg" width="48">'
},
{
text: 'Button 3',
icon: '<img src="https://cdn.framework7.io/placeholder/people-96x96-3.jpg" width="48">'
},
],
[
{
text: 'Button 1',
icon: '<img src="https://cdn.framework7.io/placeholder/fashion-96x96-4.jpg" width="48"/>'
},
{
text: 'Button 2',
icon: '<img src="https://cdn.framework7.io/placeholder/fashion-96x96-5.jpg" width="48">'
},
{
text: 'Button 3',
icon: '<img src="https://cdn.framework7.io/placeholder/fashion-96x96-6.jpg" width="48">'
},
]
]
});
$('.ac-1').on('click', () => {
ac1.open();
});
$('.ac-2').on('click', () => {
ac2.open();
});
$('.ac-3').on('click', () => {
ac3.open();
});
$('.ac-4').on('click', () => {
ac4.open();
});
$('.ac-5').on('click', () => {
ac5.open();
});
$('.ac-6').on('click', () => {
ac6.open();
});
})
return $render;
}
</script>