Popup Svelte コンポーネント

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

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

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

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

    • Popup - ポップアップ要素

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

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

    ポップアップのイベント

    EventDescription
    <Popup> events
    popupOpenPopupがオープニングアニメーションを開始すると、イベントが発生します。
    popupOpenedPopupのオープニングアニメーションが完了すると、イベントが発生します。
    popupClosePopupが閉じるアニメーションを開始すると、イベントが発生します。
    popupClosedイベントはPopupが閉じるアニメーションを完了した後に発生します。
    popupSwipeStartイベントは、スワイプして閉じるインタラクションの最初にトリガされます(ユーザがポップアップをドラッグし始めたばかりのとき)。
    popupSwipeMoveイベントはスワイプから閉じるまでの動作時に発生します。
    popupSwipeEndイベントはスワイプから閉じるまでの動作で発生する
    popupSwipeCloseスワイプでポップアップが閉じたときにイベントが発生する

    ポップアップの開閉

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

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

    ポップアップのインスタンスへのアクセス

    Popupの初期化されたインスタンスにアクセスするには、.instance()コンポーネントのメソッドを呼び出します。例えば、以下のようになります。

    <Popup bind:this={component}>...</Popup>
    
    <script>
      let component;
    
      // あるメソッドでインスタンスを取得する
      component.instance()
    </script>
    

    Examples

    <Page>
      <Navbar title="Popup"></Navbar>
      <Block>
        <p>Popup is a modal window with any HTML content that pops up over App's main content. Popup as all other overlays is part of so called "Temporary Views".</p>
        <p>
          <Button fill popupOpen=".demo-popup">Open Popup</Button>
        </p>
        <p>
          <Button fill onClick={() => popupOpened = true}>Open Via Prop Change</Button>
        </p>
        <p>
          <Button fill onClick={createPopup}>Create Dynamic Popup</Button>
        </p>
        <p>
          <Button fill popupOpen=".demo-popup-swipe">Swipe To Close</Button>
        </p>
        <p>
          <Button fill popupOpen=".demo-popup-swipe-handler">With Swipe Handler</Button>
        </p>
        <p>
          <Button fill popupOpen=".demo-popup-push">Popup Push</Button>
        </p>
      </Block>
      <Popup class="demo-popup" opened={popupOpened} onPopupClosed={() => popupOpened = false}>
        <Page>
          <Navbar title="Popup Title">
            <NavRight>
              <Link popupClose>Close</Link>
            </NavRight>
          </Navbar>
          <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>
          </Block>
        </Page>
      </Popup>
    
      <Popup class="demo-popup-swipe" swipeToClose>
        <Page>
          <Navbar title="Swipe To Close">
            <NavRight>
              <Link popupClose>Close</Link>
            </NavRight>
          </Navbar>
    
          <div style="height: 100%" class="display-flex justify-content-center align-items-center">
            <p>Swipe me up or down</p>
          </div>
        </Page>
      </Popup>
    
      <Popup class="demo-popup-swipe-handler" swipeToClose swipeHandler=".swipe-handler">
        <Page>
          <BlockTitle large>Hello!</BlockTitle>
          <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>
          </Block>
        </Page>
      </Popup>
    
      <Popup class="demo-popup-push" push>
        <Page>
          <Navbar title="Popup Push">
            <NavRight>
              <Link popupClose>Close</Link>
            </NavRight>
          </Navbar>
          <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>
          </Block>
        </Page>
      </Popup>
    </Page>
      
    
    
    <script>
      import {f7, Page, Navbar, Block, Button, Popup, NavRight, Link, BlockTitle} from 'framework7-svelte';
    
      let popupOpened = false;
      let popup;
    
      function createPopup() {
        // Create popup
        if (!popup) {
          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
        popup.open();
      }
    </script>