Popup Svelte 組件
Popup 是具有任何 HTML 內容的彈出視窗,會出現在應用程式的上方。Popup 與其他所有覆蓋層一樣,都是所謂「暫時檢視」的一部分。
Popup Svelte 組件代表 Popup 組件。
Popup 組件
包含下列組件
Popup
- 彈出元素
Popup 屬性
屬性 | 類型 | 說明 |
---|---|---|
<Popup> 屬性 | ||
tabletFullscreen | 布林值 | 定義是否在平板電腦上全螢幕顯示彈出視窗 |
opened | 布林值 | 允許開啟/關閉 Popup 並設定其初始狀態 |
backdrop | 布林值 | 啟用 Popup 背景(後方的深色半透明圖層)。預設繼承相同的應用程式參數值(true ) |
backdropEl | 字串 物件 | 自訂背景元素的 HTML 元素或字串 CSS 選擇器 |
backdropUnique | 布林值 | 如果啟用,它會為此模式建立獨特的背景元素 |
closeByBackdropClick | 布林值 | 啟用時,會在背景上按一下來關閉彈出視窗。預設繼承相同的應用程式參數值(true ) |
closeOnEscape | 布林值 | 啟用時,會在按下 ESC 鍵盤按鍵時關閉彈出視窗 |
animate | 布林值 | Popup 是否應使用動畫開啟/關閉。可以在 .open() 和 .close() 方法中覆寫。預設繼承相同的應用程式參數值(true ) |
swipeToClose | 布林值 字串 | Popup 是否可以使用滑動手勢關閉。可以是 true 以允許使用滑動到頂部和底部關閉彈出視窗,或者可以是 to-top (字串)以僅允許滑動到頂部關閉彈出視窗,或 to-bottom (字串)以僅允許滑動到底部關閉彈出視窗。 |
swipeHandler | HTMLElement 字串 | 如果未傳遞,則可以滑動整個彈出視窗以關閉。您可以在這裡傳遞 HTML 元素或自訂元素的字串 CSS 選擇器,該元素將用作滑動目標。(swipeToClose 也必須啟用) |
push | 布林值 | 啟用時,它會在開啟時推動後方的檢視。僅在頂部安全區域就位時才有效。也可以透過將 popup-push 類別新增到 Popup 元素來啟用。 |
containerEl | HTMLElement 字串 | 要將模式安裝到的元素(預設為應用程式根元素) |
彈出事件
事件 | 說明 |
---|---|
<Popup> 事件 | |
popupOpen | 當彈出視窗開始開啟動畫時觸發事件 |
popupOpened | 當彈出視窗完成開啟動畫後觸發事件 |
popupClose | 當彈出視窗開始關閉動畫時觸發事件 |
popupClosed | 當彈出視窗完成關閉動畫後觸發事件 |
popupSwipeStart | 在滑動關閉互動的開始時觸發事件(當使用者剛開始拖曳彈出視窗時) |
popupSwipeMove | 在滑動關閉移動互動時觸發事件 |
popupSwipeEnd | 在滑動關閉釋放時觸發事件 |
popupSwipeClose | 當彈出視窗使用滑動關閉時觸發事件 |
開啟和關閉彈出視窗
你可以控制彈出視窗的狀態,開啟和關閉它
- 使用 彈出視窗 API
- 透過傳遞
true
或false
給它的opened
屬性 - 透過點擊具有相關
popupOpen
屬性(用於開啟它)和popupClose
屬性(用於關閉它)的 連結 或 按鈕
存取彈出視窗實例
你可以透過呼叫元件的 .instance()
方法來存取彈出視窗初始化的實例。例如
<Popup bind:this={component}>...</Popup>
<script>
let component;
// to get instance in some method
component.instance()
</script>
範例
popup.svelte
<script>
import {
f7,
Navbar,
Page,
Popup,
BlockTitle,
Block,
NavRight,
Link,
Button,
View,
} from 'framework7-svelte';
let popupOpened = false;
let dynamicPopup;
function createPopup() {
// Create popup
if (!dynamicPopup) {
dynamicPopup = 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
dynamicPopup.open();
}
function onPageBeforeRemove() {
// Destroy popup when page removed
if (dynamicPopup) dynamicPopup.destroy();
}
</script>
<Page {onPageBeforeRemove}>
<Navbar title="Popup" />
<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={() => (popupOpened = 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 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 push class="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 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="to-bottom" swipeHandler=".swipe-handler">
<Page>
<div slot="fixed" class="swipe-handler" />
<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>