スポンサー
Support Framework7

アクションシート

    アクションシートは、与えられたタスクをどのように進めるかの選択肢をユーザーに提示するためのスライドアップペインです。

    また、アクションシートを使用して、危険な可能性のあるアクションの確認をユーザーに促すこともできます。

    アクションシートには任意のタイトルと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。アニメーションでアクションシートを閉じます。

    メソッドはアクションシートのインスタンスを返します。

    アクションシートのパラメータ

    それでは、アクションシートを作成するために必要な、利用可能なパラメータの一覧を見てみましょう。

    ParameterTypeDefaultDescription
    elHTMLElement
    string
    アクションシート要素 すでにHTML内にアクションシート要素があり、この要素を使って新しいインスタンスを作成したい場合に便利です。
    contentstringFull Action Sheet HTML content string. カスタムHTMLでアクションシート要素を作成したい場合に便利です。
    backdropbooleantrueアクションシートの背景を有効にする(背後の暗い半透明のレイヤー
    backdropElHTMLElement
    string
    HTML 要素または文字列 カスタム背景要素の CSS セレクタ
    closeByBackdropClickbooleantrue有効にすると、背景をクリックするとアクションシートが閉じられます。
    closeByOutsideClickbooleanfalse有効にすると、アクションシートはその外側をクリックすると閉じます。
    closeOnEscapebooleanfalse有効にすると、ESCキーを押したときにアクションシートが閉じます。
    animatebooleantrueアクションシートの開閉をアニメーションで行うかどうかを指定します。.open().close()`メソッドで上書きすることができます。
    buttonsarrayアクションシートのグループ/ボタン。この場合、アクションレイアウトは、渡されたグループとボタンに基づいて動的に生成されます。グループの場合は、各アイテムがグループのボタンを持つ配列を表すような配列になります。
    gridbooleanfalseグリッドボタンのレイアウトを有効にする
    convertToPopoverbooleantrue有効にすると、大画面やAuroraテーマを使用したデスクトップデバイスでは、アクションシートがPopoverに変換されます。
    forceToPopoverbooleanfalse有効にすると、アクションシートは常にPopoverに変換されます。
    targetElHTMLElement
    string
    HTML 要素または文字列 対象要素の CSS セレクタです。ポップオーバーへの変換が使用されている場合は必須
    targetXnumber仮想ターゲット要素の画面左端からの水平方向のオフセット。実際のターゲット要素(targetEl)を使用せずに、ポップオーバーへの変換を使用する場合に必要です。
    targetYnumber仮想目標要素の画面上部からの垂直方向のオフセットです。real target element (targetEl)を使用せずにpopoverへの変換を使用する場合に必要です。
    targetWidthnumber0仮想ターゲット要素の幅(px)を指定します。real target element (targetEl) を使用せずに popover への変換を使用する場合に必要です。
    targetHeightnumber0仮想的なターゲット要素の高さ (px)。実際のターゲット要素 (targetEl) を使わずに popover への変換を行う場合に必要です。
    cssClassstringアクションシート要素に設定される追加のCSSクラス名です。
    onClickfunction(actions, e)アクションシートのボタンをクリックした後に実行されるコールバック関数
    renderfunctionアクションシートをレンダリングするカスタム関数。アクションシートのhtmlを返さなければなりません。
    renderPopoverfunctionポップオーバーへの変換が使用されている場合に、ポップオーバーをレンダリングするカスタム関数です。ポップオーバーのhtmlを返さなければならない。
    onobject

    イベントハンドラーを持つオブジェクト。例えば、以下のようになります。

    var actions = app.actions.create({
      buttons: [ /* ... */ ],
      on: {
        opened: function () {
          console.log('Action Sheet opened')
        }
      }
    })

    以下のパラメータは、すべてのアクションシートのデフォルトを設定するために、actionsプロパティのグローバルアプリのパラメータで使用できることに注意してください。例えば、以下のようなものがあります。

    var app = new Framework7({
      actions: {
        convertToPopover: false,
        grid: true,
      }
    });

    ボタンのパラメータ

    配列 buttons の各ボタンは、ボタンのパラメータを持つオブジェクトとして提示されなければなりません。

    ParameterTypeDefaultDescription
    textstringボタンのテキストの文字列 (HTML文字列でも可)
    iconstringアイコンのHTML文字列
    boldbooleanfalseボタンのテキストを太字にするかどうか
    colorstringボタンの色(デフォルトカラーのひとつ
    bgstringボタンの背景色(デフォルトの色の一つ
    labelbooleanfalse有効にすると、ボタンではなくラベルとして表示されます。
    disabledbooleanfalseボタンを無効にするかどうかを定義します。
    closebooleantrue有効な場合、ボタンをクリックするとアクションシートを閉じます。
    onClickfunction(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)アクションシートを開きます。ここでは
    • animate - boolean (デフォルトでは true) - アニメーションで開くかどうかを定義します。
    actions.close(animate)アクションシートを閉じます。アクションシートを閉じる
    • animate - boolean(デフォルトではtrue) - アニメーションで閉じるかどうかを定義します。
    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イベント

    EventTargetDescription
    actions:openAction Sheet Element<div class="actions-modal">イベントは、アクションシートがオープニングアニメーションを開始したときに発生します。
    actions:openedAction Sheet Element<div class="actions-modal">イベントは、アクションシートがオープニングアニメーションを完了した後に発生します。
    actions:closeAction Sheet Element<div class="actions-modal">アクションシートが閉じるアニメーションを開始したときにイベントが発生します。
    actions:closedAction Sheet Element<div class="actions-modal">アクションシートのクロージングアニメーションの完了後にイベントが発生する

    アプリとアクションシートインスタンスのイベント

    Action Sheetインスタンスは、selfインスタンスとappインスタンスの両方でイベントを発行します。アプリインスタンスのイベントは、同じ名前でプレフィックスが actions となっています。

    EventArgumentsTargetDescription
    openactionsactionsイベントは、アクションシートがオープニングアニメーションを開始したときに発生します。イベントハンドラは引数としてアクションシートインスタンスを受け取ります。
    actionsOpenactionsapp
    openedactionsactionsイベントは、アクションシートがそのオープニングアニメーションを完了した後にトリガーされます。As an argument event handler receives action sheet instance
    actionsOpenedactionsapp
    closeactionsactionsイベントはアクションシートのクロージングアニメーション開始時に発生します。As an argument event handler receives action sheet instance
    actionsCloseactionsapp
    closedactionsactionsアクションシートが閉じるアニメーションを完了するとイベントが発生します。As an argument event handler receives action sheet instance
    actionsClosedactionsapp
    beforeDestroyactionsactionsイベントは Action Sheet のインスタンスが破棄される直前に発生します。As an argument event handler receive action sheet instance
    actionsBeforeDestroyactionsapp

    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>