ポップアップ Vue コンポーネント

    Popupは、アプリのメインコンテンツの上にポップアップする、任意のHTMLコンテンツを持つポップアップウィンドウです。ポップアップは、他のオーバーレイと同様に、いわゆる「一時的なビュー」の一部です。

    Popup Vueコンポーネントは、Popupコンポーネントを表します。

    ポップアップコンポーネント

    以下のコンポーネントが含まれています。

    • f7-popup - ポップアップ要素

    ポップアップのプロパティ

    PropTypeDescription
    <f7-popup> properties
    tablet-fullscreenbooleanポップアップをタブレットにフルスクリーンで表示するかどうかを定義します
    openedbooleanポップアップの開閉や初期状態の設定を行います。
    backdropbooleanポップアップの背景(背後の暗い半透明のレイヤー)を有効にします。デフォルトでは、同じアプリのパラメータ値(true)を継承します。
    backdrop-elstring
    object
    HTML要素または文字列 カスタム背景要素のCSSセレクタ
    close-by-backdrop-clickboolean有効にすると、背景をクリックしたときにポップアップが閉じます。デフォルトでは、同じアプリのパラメータ値(true)を継承します。
    close-on-escapebooleanEnable, popup will be closed on ESC keyboard key press
    animatebooleanポップアップの開閉をアニメーションで行うかどうかを指定します。.open().close()メソッドで上書きすることができます。デフォルトでは同じアプリのパラメータ値(true`)を継承します。
    swipe-to-closeboolean
    string
    スワイプジェスチャーでPopupを閉じることができるかどうか。上と下へのスワイプでポップアップを閉じられるようにするには true を、上へのスワイプのみでポップアップを閉じられるようにするには to-top (文字列) を、下へのスワイプのみでポップアップを閉じられるようにするには to-bottom (文字列) を指定します。
    swipe-handlerHTMLElement
    string
    渡さない場合は、ポップアップ全体をスワイプして閉じることができます。ここでは、スワイプターゲットとして使用されるカスタム要素のHTML要素または文字列のCSSセレクタを渡すことができます。(swipeToClose も有効にする必要があります)
    pushboolean有効にすると、オープン時にビューを後ろに押します。トップセーフエリアが設定されている場合のみ動作します。Popup要素にpopup-pushクラスを追加することでも、この機能を有効にすることができます。
    container-elHTMLElement
    string
    Element to mount modal to (default to app root element)

    ポップアップのイベント

    EventDescription
    <f7-popup> events
    popup:openPopupがオープニングアニメーションを開始すると、イベントが発生します。
    popup:openedPopupのオープニングアニメーションが完了すると、イベントが発生します。
    popup:closePopupが閉じるアニメーションを開始すると、イベントが発生します。
    popup:closedイベントはPopupが閉じるアニメーションを完了した後に発生します。
    popup:swipestartイベントは、スワイプして閉じるインタラクションの最初にトリガされます(ユーザがポップアップをドラッグし始めたばかりのとき)。
    popup:swipemoveイベントはスワイプから閉じるまでの動作時に発生します。
    popup:swipeendイベントはスワイプから閉じるまでの動作で発生する
    popup:swipecloseスワイプでポップアップが閉じた時にイベントが発生する

    ポップアップのv-model

    ポップアップコンポーネントは opened のプロップで v-model をサポートします。

    <template>
      <f7-page>
        <f7-popup v-model:opened="isOpened">
          ...
        </f7-popup>
        <p>Modal is opened: {{ isOpened }}</p>
      </f7-page>
    </template>
    <script>
      export default {
        data() {
          return {
            isOpened: false,
          };
        }
      };
    </script>
    

    ポップアップの開閉

    ポップアップの状態を制御して、開いたり閉じたりすることができます。

    • Popup APIを使用します。
    • Popupのopenedプロップにtrueまたはfalseを渡す
    • リンクボタンをクリックして、関連する popup-open プロパティ(ポップアップを開く)や popup-close プロパティ(ポップアップを閉じる)を指定する。

    Examples

    <template>
      
        
    <f7-page @page:beforeremove="onPageBeforeRemove">
      <f7-navbar title="Popup"></f7-navbar>
      <f7-block>
        <p>
          <f7-button fill popup-open=".demo-popup">Open Popup</f7-button>
        </p>
        <p>
          <f7-button fill @click="popupOpened = true">Open Via Prop Change</f7-button>
        </p>
        <p>
          <f7-button fill @click="createPopup">Create Dynamic Popup</f7-button>
        </p>
        <p>
          <f7-button fill popup-open=".demo-popup-swipe">Swipe To Close</f7-button>
        </p>
        <p>
          <f7-button fill popup-open=".demo-popup-swipe-handler">With Swipe Handler</f7-button>
        </p>
        <p>
          <f7-button fill popup-open=".demo-popup-push">Popup Push</f7-button>
        </p>
      </f7-block>
      <f7-popup class="demo-popup" :opened="popupOpened" @popup:closed="popupOpened = false">
        <f7-page>
          <f7-navbar title="Popup Title">
            <f7-nav-right>
              <f7-link popup-close>Close</f7-link>
            </f7-nav-right>
          </f7-navbar>
          <f7-block>
            <p>Here comes popup. You can put here anything, even independent view with its own navigation. Also not, that by default popup looks a bit different on iPhone/iPod and iPad, on iPhone it is fullscreen.</p>
            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse faucibus mauris leo, eu bibendum neque congue non. Ut leo mauris, eleifend eu commodo a, egestas ac urna. Maecenas in lacus faucibus, viverra ipsum pulvinar, molestie arcu. Etiam lacinia venenatis dignissim. Suspendisse non nisl semper tellus malesuada suscipit eu et eros. Nulla eu enim quis quam elementum vulputate. Mauris ornare consequat nunc viverra pellentesque. Aenean semper eu massa sit amet aliquam. Integer et neque sed libero mollis elementum at vitae ligula. Vestibulum pharetra sed libero sed porttitor. Suspendisse a faucibus lectus.</p>
            <p>Duis ut mauris sollicitudin, venenatis nisi sed, luctus ligula. Phasellus blandit nisl ut lorem semper pharetra. Nullam tortor nibh, suscipit in consequat vel, feugiat sed quam. Nam risus libero, auctor vel tristique ac, malesuada ut ante. Sed molestie, est in eleifend sagittis, leo tortor ullamcorper erat, at vulputate eros sapien nec libero. Mauris dapibus laoreet nibh quis bibendum. Fusce dolor sem, suscipit in iaculis id, pharetra at urna. Pellentesque tempor congue massa quis faucibus. Vestibulum nunc eros, convallis blandit dui sit amet, gravida adipiscing libero.</p>
          </f7-block>
        </f7-page>
      </f7-popup>
    
      <f7-popup class="demo-popup-swipe" swipe-to-close>
        <f7-page>
          <f7-navbar title="Swipe To Close">
            <f7-nav-right>
              <f7-link popup-close>Close</f7-link>
            </f7-nav-right>
          </f7-navbar>
    
          <div style="height: 100%" class="display-flex justify-content-center align-items-center">
            <p>Swipe me up or down</p>
          </div>
        </f7-page>
      </f7-popup>
    
      <f7-popup class="demo-popup-swipe-handler" swipe-to-close swipe-handler=".swipe-handler">
        <f7-page>
          <f7-block-title large>Hello!</f7-block-title>
          <f7-block strong>
            <p class="swipe-handler"><b>Swipe works only on this paragraph</b></p>
            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse faucibus mauris leo, eu bibendum neque congue non. Ut leo mauris, eleifend eu commodo a, egestas ac urna. Maecenas in lacus faucibus, viverra ipsum pulvinar, molestie arcu. Etiam lacinia venenatis dignissim. Suspendisse non nisl semper tellus malesuada suscipit eu et eros. Nulla eu enim quis quam elementum vulputate. Mauris ornare consequat nunc viverra pellentesque. Aenean semper eu massa sit amet aliquam. Integer et neque sed libero mollis elementum at vitae ligula. Vestibulum pharetra sed libero sed porttitor. Suspendisse a faucibus lectus.</p>
            <p>Duis ut mauris sollicitudin, venenatis nisi sed, luctus ligula. Phasellus blandit nisl ut lorem semper pharetra. Nullam tortor nibh, suscipit in consequat vel, feugiat sed quam. Nam risus libero, auctor vel tristique ac, malesuada ut ante. Sed molestie, est in eleifend sagittis, leo tortor ullamcorper erat, at vulputate eros sapien nec libero. Mauris dapibus laoreet nibh quis bibendum. Fusce dolor sem, suscipit in iaculis id, pharetra at urna. Pellentesque tempor congue massa quis faucibus. Vestibulum nunc eros, convallis blandit dui sit amet, gravida adipiscing libero.</p>
            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse faucibus mauris leo, eu bibendum neque congue non. Ut leo mauris, eleifend eu commodo a, egestas ac urna. Maecenas in lacus faucibus, viverra ipsum pulvinar, molestie arcu. Etiam lacinia venenatis dignissim. Suspendisse non nisl semper tellus malesuada suscipit eu et eros. Nulla eu enim quis quam elementum vulputate. Mauris ornare consequat nunc viverra pellentesque. Aenean semper eu massa sit amet aliquam. Integer et neque sed libero mollis elementum at vitae ligula. Vestibulum pharetra sed libero sed porttitor. Suspendisse a faucibus lectus.</p>
            <p>Duis ut mauris sollicitudin, venenatis nisi sed, luctus ligula. Phasellus blandit nisl ut lorem semper pharetra. Nullam tortor nibh, suscipit in consequat vel, feugiat sed quam. Nam risus libero, auctor vel tristique ac, malesuada ut ante. Sed molestie, est in eleifend sagittis, leo tortor ullamcorper erat, at vulputate eros sapien nec libero. Mauris dapibus laoreet nibh quis bibendum. Fusce dolor sem, suscipit in iaculis id, pharetra at urna. Pellentesque tempor congue massa quis faucibus. Vestibulum nunc eros, convallis blandit dui sit amet, gravida adipiscing libero.</p>
          </f7-block>
        </f7-page>
      </f7-popup>
    
      <f7-popup class="demo-popup-push" push>
        <f7-page>
          <f7-navbar title="Popup Push">
            <f7-nav-right>
              <f7-link popup-close>Close</f7-link>
            </f7-nav-right>
          </f7-navbar>
          <f7-block strong>
            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse faucibus mauris leo, eu bibendum neque congue non. Ut leo mauris, eleifend eu commodo a, egestas ac urna. Maecenas in lacus faucibus, viverra ipsum pulvinar, molestie arcu. Etiam lacinia venenatis dignissim. Suspendisse non nisl semper tellus malesuada suscipit eu et eros. Nulla eu enim quis quam elementum vulputate. Mauris ornare consequat nunc viverra pellentesque. Aenean semper eu massa sit amet aliquam. Integer et neque sed libero mollis elementum at vitae ligula. Vestibulum pharetra sed libero sed porttitor. Suspendisse a faucibus lectus.</p>
            <p>Duis ut mauris sollicitudin, venenatis nisi sed, luctus ligula. Phasellus blandit nisl ut lorem semper pharetra. Nullam tortor nibh, suscipit in consequat vel, feugiat sed quam. Nam risus libero, auctor vel tristique ac, malesuada ut ante. Sed molestie, est in eleifend sagittis, leo tortor ullamcorper erat, at vulputate eros sapien nec libero. Mauris dapibus laoreet nibh quis bibendum. Fusce dolor sem, suscipit in iaculis id, pharetra at urna. Pellentesque tempor congue massa quis faucibus. Vestibulum nunc eros, convallis blandit dui sit amet, gravida adipiscing libero.</p>
            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse faucibus mauris leo, eu bibendum neque congue non. Ut leo mauris, eleifend eu commodo a, egestas ac urna. Maecenas in lacus faucibus, viverra ipsum pulvinar, molestie arcu. Etiam lacinia venenatis dignissim. Suspendisse non nisl semper tellus malesuada suscipit eu et eros. Nulla eu enim quis quam elementum vulputate. Mauris ornare consequat nunc viverra pellentesque. Aenean semper eu massa sit amet aliquam. Integer et neque sed libero mollis elementum at vitae ligula. Vestibulum pharetra sed libero sed porttitor. Suspendisse a faucibus lectus.</p>
            <p>Duis ut mauris sollicitudin, venenatis nisi sed, luctus ligula. Phasellus blandit nisl ut lorem semper pharetra. Nullam tortor nibh, suscipit in consequat vel, feugiat sed quam. Nam risus libero, auctor vel tristique ac, malesuada ut ante. Sed molestie, est in eleifend sagittis, leo tortor ullamcorper erat, at vulputate eros sapien nec libero. Mauris dapibus laoreet nibh quis bibendum. Fusce dolor sem, suscipit in iaculis id, pharetra at urna. Pellentesque tempor congue massa quis faucibus. Vestibulum nunc eros, convallis blandit dui sit amet, gravida adipiscing libero.</p>
          </f7-block>
        </f7-page>
      </f7-popup>
    
    </f7-page>
    </template>
    <script>
      import { f7 } from 'framework7-vue';
    
      export default {
        data() {
          return {
            popupOpened: false,
          };
        },
        methods: {
          createPopup() {
            const self = this;
            // Create popup
            if (!self.popup) {
              self.popup = f7.popup.create({
                content: `
                  <div class="popup">
                    <div class="page">
                      <div class="navbar">
                        <div class="navbar-bg"></div>
                        <div class="navbar-inner">
                          <div class="title">Dynamic Popup</div>
                          <div class="right"><a href="#" class="link popup-close">Close</a></div>
                        </div>
                      </div>
                      <div class="page-content">
                        <div class="block">
                          <p>This popup was created dynamically</p>
                          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse faucibus mauris leo, eu bibendum neque congue non. Ut leo mauris, eleifend eu commodo a, egestas ac urna. Maecenas in lacus faucibus, viverra ipsum pulvinar, molestie arcu. Etiam lacinia venenatis dignissim. Suspendisse non nisl semper tellus malesuada suscipit eu et eros. Nulla eu enim quis quam elementum vulputate. Mauris ornare consequat nunc viverra pellentesque. Aenean semper eu massa sit amet aliquam. Integer et neque sed libero mollis elementum at vitae ligula. Vestibulum pharetra sed libero sed porttitor. Suspendisse a faucibus lectus.</p>
                        </div>
                      </div>
                    </div>
                  </div>
                `.trim(),
              });
            }
            // Open it
            self.popup.open();
          },
          onPageBeforeRemove() {
            const self = this;
            // Destroy popup when page removed
            if (self.popup) self.popup.destroy();
          },
        },
      }
    </script>