Popup Reactコンポーネント
Popupは、アプリのメインコンテンツの上にポップアップする、任意のHTMLコンテンツを持つポップアップウィンドウです。ポップアップは他のすべてのオーバーレイと同様に、いわゆる「一時的なビュー」の一部です。
Popup Reactコンポーネントは、Popupコンポーネントを表します。
ポップアップコンポーネント
以下のコンポーネントが含まれています。
Popup
- ポップアップ要素
ポップアップのプロパティ
Prop | Type | Description | |
---|---|---|---|
<Popup> properties | |||
tabletFullscreen | boolean | タブレットでポップアップをフルスクリーンで表示するかどうかを定義します。 | |
opened | boolean | ポップアップの開閉や初期状態の設定を行います。 | |
backdrop | boolean | ポップアップの背景(背後の暗い半透明のレイヤー)を有効にします。デフォルトでは、同じアプリのパラメータ値(true )を継承します。 | |
backdropEl | string object | HTML要素または文字列 カスタム背景要素のCSSセレクタ | |
closeByBackdropClick | boolean | 有効にすると、背景をクリックしたときにポップアップが閉じます。デフォルトでは、同じアプリのパラメータ値(true )を継承します。 | |
closeOnEscape | boolean | Enable, popup will be closed on ESC keyboard key press | |
animate | boolean | ポップアップの開閉をアニメーションで行うかどうかを指定します。.open()と .close()メソッドで上書きすることができます。デフォルトでは同じアプリのパラメータ値( true`)を継承します。 | |
swipeToClose | boolean string | スワイプジェスチャーでPopupを閉じることができるかどうか。上と下へのスワイプでポップアップを閉じられるようにするには true を、上へのスワイプのみでポップアップを閉じられるようにするには to-top (文字列) を、下へのスワイプのみでポップアップを閉じられるようにするには to-bottom (文字列) を指定します。 | |
swipeHandler | HTMLElement string | 渡さない場合は、ポップアップ全体をスワイプして閉じることができます。ここでは、スワイプターゲットとして使用されるカスタム要素のHTML要素または文字列のCSSセレクタを渡すことができます。(swipeToClose も有効にする必要があります) | |
push | boolean | 有効にすると、オープン時にビューを後ろに押します。トップセーフエリアが設定されている場合のみ動作します。Popup要素にpopup-push クラスを追加することでも、この機能を有効にすることができます。 | |
containerEl | HTMLElement string | Element to mount modal to (default to app root element) |
ポップアップのイベント
Event | Description |
---|---|
<Popup> events | |
popupOpen | Popupがオープニングアニメーションを開始すると、イベントが発生します。 |
popupOpened | Popupのオープニングアニメーションが完了すると、イベントが発生します。 |
popupClose | Popupが閉じるアニメーションを開始すると、イベントが発生します。 |
popupClosed | イベントはPopupが閉じるアニメーションを完了した後に発生します。 |
popupSwipeStart | イベントは、スワイプして閉じるインタラクションの最初にトリガされます(ユーザがポップアップをドラッグし始めたばかりのとき)。 |
popupSwipeMove | イベントはスワイプから閉じるまでの動作時に発生します。 |
popupSwipeEnd | イベントはスワイプから閉じるまでの動作で発生する |
popupSwipeClose | スワイプでポップアップが閉じた時にイベントが発生する |
ポップアップの開閉
ポップアップの状態を制御して、開いたり閉じたりすることができます。
- Popup APIを使用します。
- ポップアップの
opened
プロパティーにtrue
またはfalse
を渡します。 - リンクやボタンをクリックして、関連する
popupOpen
プロパティ(ポップアップを開く)やpopupClose
プロパティ(ポップアップを閉じる)を指定する。
Examples
import React, { useState, useRef } from 'react';
import {
Page,
Navbar,
Block,
Button,
Popup,
NavRight,
Link,
BlockTitle,
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 className="popup">
<div className="page">
<div className="navbar">
<div className="navbar-bg"></div>
<div className="navbar-inner">
<div className="title">Dynamic Popup</div>
<div className="right"><a href="#" className="link popup-close">Close</a></div>
</div>
</div>
<div className="page-content">
<div className="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();
};
return (
<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={() => setPopupOpened(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
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 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 swipeHandler=".swipe-handler">
<Page>
<BlockTitle large>Hello!</BlockTitle>
<Block strong>
<p className="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 className="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>
);
};