彈出式視窗 React 元件

彈出式視窗是一個包含任何 HTML 內容的彈出式視窗,會出現在應用程式的主要內容上方。彈出式視窗與其他所有覆蓋層一樣,都是所謂的「暫時檢視」的一部分。

彈出式視窗 React 元件代表 彈出式視窗 元件。

包含下列元件

屬性類型說明
<Popup> 屬性
tabletFullscreen布林值定義彈出視窗是否在平板電腦上全螢幕顯示
opened布林值允許開啟/關閉彈出視窗並設定其初始狀態
backdrop布林值啟用彈出視窗背景(後方的半透明深色圖層)。預設繼承相同的應用程式參數值(true
backdropEl字串
物件
自訂背景元素的 HTML 元素或字串 CSS 選擇器
backdropUnique布林值如果啟用,將為此模式視窗建立獨特的背景元素
closeByBackdropClick布林值啟用時,點擊背景會關閉彈出視窗。預設繼承相同的應用程式參數值(true
closeOnEscape布林值啟用時,按下 ESC 鍵盤按鍵會關閉彈出視窗
animate布林值彈出視窗是否應以動畫開啟/關閉。可以在 .open().close() 方法中覆寫。預設繼承相同的應用程式參數值(true
swipeToClose布林值
字串
彈出視窗是否可以用滑動手勢關閉。可以是 true 以允許用向上和向下滑動關閉彈出視窗,也可以是 to-top(字串)以僅允許向上滑動關閉彈出視窗,或 to-bottom(字串)以僅允許向下滑動關閉彈出視窗。
swipeHandlerHTMLElement
字串
如果未傳遞,則可以滑動整個彈出視窗以關閉。您可以在這裡傳遞 HTML 元素或自訂元素的字串 CSS 選擇器,該元素將用作滑動目標。(swipeToClose 也必須啟用)
push布林值啟用時,開啟時會推動後方的檢視。僅在頂部安全區域就位時才有效。也可以透過將 popup-push 類別新增到彈出視窗元素來啟用。
containerElHTMLElement
字串
用於掛載模式視窗的元素(預設為應用程式根元素)
事件說明
<Popup> 事件
popupOpen當彈出視窗開始其開啟動畫時,將觸發事件
popupOpened當彈出視窗完成其開啟動畫後,將觸發事件
popupClose當彈出視窗開始其關閉動畫時,將觸發事件
popupClosed彈出視窗完成關閉動畫後觸發事件
popupSwipeStart在滑動關閉互動開始時觸發事件(當使用者剛開始拖曳彈出視窗時)
popupSwipeMove在滑動關閉移動互動時觸發事件
popupSwipeEnd在滑動關閉釋放時觸發事件
popupSwipeClose使用滑動關閉彈出視窗時觸發事件

開啟和關閉彈出視窗

您可以控制彈出視窗狀態,開啟和關閉它

範例

popup.jsx
import React, { useRef, useState } from 'react';
import {
  Navbar,
  Page,
  Popup,
  BlockTitle,
  Block,
  NavRight,
  Link,
  Button,
  View,
  f7,
} from 'framework7-react';

export default () => {
  const [popupOpened, setPopupOpened] = useState(false);
  const popup = useRef(null);

  const createPopup = () => {
    // Create popup
    if (!popup.current) {
      popup.current = f7.popup.create({
        content: `
          <div class="popup">
            <div class="page">
              <div class="navbar">
                <div class="navbar-inner">
                  <div class="navbar-bg"></div>
                  <div class="title">Dynamic Popup</div>
                  <div class="right"><a  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.current.open();
  };

  const onPageBeforeRemove = () => {
    // Destroy popup when page removed
    if (popup.current) popup.current.destroy();
  };
  return (
    <Page onPageBeforeRemove={onPageBeforeRemove}>
      <Navbar title="Popup"></Navbar>
      <Block strongIos outlineIos>
        <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={() => setPopupOpened(true)}>
            Open Via Prop Change
          </Button>
        </p>
        <p>
          <Button fill onClick={createPopup}>
            Create Dynamic Popup
          </Button>
        </p>
      </Block>

      <BlockTitle>Swipe To Close</BlockTitle>
      <Block strongIos outlineIos>
        <p>Popup can be closed with swipe to top or bottom:</p>
        <p>
          <Button fill popupOpen=".demo-popup-swipe">
            Swipe To Close
          </Button>
        </p>
        <p>
          Or it can be closed with swipe on special swipe handler and, for example, only to bottom:
        </p>
        <p>
          <Button fill popupOpen=".demo-popup-swipe-handler">
            With Swipe Handler
          </Button>
        </p>
      </Block>

      <BlockTitle>Push View</BlockTitle>
      <Block strongIos outlineIos>
        <p>
          Popup can push view behind. By default has effect only when `safe-area-inset-top` is more
          than zero (iOS fullscreen webapp or iOS cordova app)
        </p>
        <p>
          <Button fill popupOpen=".demo-popup-push">
            Popup Push
          </Button>
        </p>
      </Block>

      <Popup
        className="demo-popup"
        opened={popupOpened}
        onPopupClosed={() => setPopupOpened(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 push className="demo-popup-push">
        <View>
          <Page>
            <Navbar title="Push Popup" large transparent>
              <NavRight>
                <Link popupClose>Close</Link>
              </NavRight>
            </Navbar>
            <Block>
              <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>
            </Block>
          </Page>
        </View>
      </Popup>

      <Popup className="demo-popup-swipe" swipeToClose>
        <Page>
          <Navbar title="Swipe To Close">
            <NavRight>
              <Link popupClose>Close</Link>
            </NavRight>
          </Navbar>

          <div
            style={{ height: '100%' }}
            className="display-flex justify-content-center align-items-center"
          >
            <p>Swipe me up or down</p>
          </div>
        </Page>
      </Popup>

      <Popup
        className="demo-popup-swipe-handler"
        swipeToClose="to-bottom"
        swipeHandler=".swipe-handler"
      >
        <Page>
          <div slot="fixed" className="swipe-handler"></div>
          <BlockTitle large>Hello!</BlockTitle>
          <Block strongIos outlineIos>
            <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>
  );
};