彈出視窗
彈出視窗元件用於管理彈出視窗中內容的呈現。您可以使用彈出視窗暫時呈現資訊。彈出視窗會保持可見,直到使用者輕觸彈出視窗視窗外側,或您明確關閉它為止。
請注意,不建議在小螢幕 (iPhone) 上使用彈出視窗。在小螢幕上,您應該改用 動作表單。
彈出視窗配置
首先,讓我們看看彈出視窗配置,它非常簡單
<body>
...
<div class="popover">
<!-- Popover's arrow -->
<div class="popover-arrow"></div>
<!-- Popover content -->
<div class="popover-inner">
<!-- Any HTML content here -->
</div>
</div>
</body>
彈出視窗是高度可自訂的元素,您可以將任何內容放入其中,甚至可以放入另一個具有導覽功能的檢視。
彈出視窗應用程式方法
讓我們看看相關的應用程式方法,以使用彈出視窗
app.popover.create(parameters)- 建立彈出視窗執行個體
- parameters - object。具有彈出視窗參數的物件
方法傳回已建立的彈出視窗執行個體
app.popover.destroy(el)- 銷毀彈出視窗執行個體
- el - HTMLElement 或 string (具有 CSS 選擇器) 或 object。要銷毀的彈出視窗元素或彈出視窗執行個體。
app.popover.get(el)- 透過 HTML 元素取得彈出視窗執行個體
- el - HTMLElement 或 string (具有 CSS 選擇器)。彈出視窗元素。
方法傳回彈出視窗執行個體
app.popover.open(el, targetEl, animate)- 開啟彈出視窗
- el - HTMLElement 或 string (具有 CSS 選擇器)。要開啟的彈出視窗元素。
- targetEl - HTMLElement 或 string (具有 CSS 選擇器)。目標元素,用於設定彈出視窗在該元素周圍的位置
- animate - boolean。使用動畫開啟彈出視窗。
方法傳回彈出視窗執行個體
app.popover.close(el, animate)- 關閉彈出視窗
- el - HTMLElement 或 string (具有 CSS 選擇器)。要關閉的彈出視窗元素。
- animate - 布林值。以動畫關閉浮動訊息。
方法傳回彈出視窗執行個體
浮動訊息參數
現在讓我們來看看建立浮動訊息所需的可用參數清單
參數 | 類型 | 預設值 | 說明 |
---|---|---|---|
el | HTMLElement | 浮動訊息元素。如果您在 HTML 中已有浮動訊息元素,且想要使用此元素建立新執行個體時,這會很有用 | |
arrow | 布林值 | true | 啟用浮動訊息箭頭/角落 |
content | 字串 | 完整的浮動訊息 HTML 版面配置字串。如果您想要動態建立浮動訊息元素時,這會很有用 | |
verticalPosition | 字串 | auto | 強制浮動訊息垂直位置,可以是 auto 、top 或 bottom |
backdrop | 布林值 | true | 啟用浮動訊息背景(後面的深色半透明圖層) |
backdropUnique | 布林值 | false | 如果啟用,它會專門為此模式建立唯一的背景元素 |
backdropEl | HTMLElement 字串 | 自訂背景元素的 HTML 元素或字串 CSS 選擇器 | |
closeByBackdropClick | 布林值 | true | 啟用時,浮動訊息會在背景按一下時關閉 |
closeByOutsideClick | 布林值 | true | 啟用時,浮動訊息會在按一下其外部時關閉 |
closeOnEscape | 布林值 | false | 啟用時,浮動訊息會在按下 ESC 鍵盤按鍵時關閉 |
animate | 布林值 | true | 浮動訊息是否應以動畫開啟/關閉。可以在 .open() 和 .close() 方法中覆寫 |
targetEl | HTMLElement 字串 | 目標元素的 HTML 元素或字串 CSS 選擇器 | |
targetX | 數字 | 虛擬目標元素與螢幕左側的水平偏移量。在不使用實際目標元素 (targetEl ) 時需要 | |
targetY | 數字 | 虛擬目標元素與螢幕頂端的垂直偏移量。在不使用實際目標元素 (targetEl ) 時需要 | |
targetWidth | 數字 | 0 | 虛擬目標元素寬度(以像素為單位)。在不使用實際目標元素 (targetEl ) 時需要 |
targetHeight | 數字 | 0 | 虛擬目標元素高度(以像素為單位)。在不使用實際目標元素 (targetEl ) 時需要 |
containerEl | HTMLElement 字串 | 要將模式安裝到的元素(預設為應用程式根元素) | |
on | 物件 | 具有事件處理程序的物件。例如
|
請注意,可以在 popover
屬性下的全域應用程式參數中使用所有下列參數,以設定所有彈出視窗的預設值。例如
var app = new Framework7({
popover: {
closeByBackdropClick: false,
}
});
如果您使用自動初始化的彈出視窗(例如,您不會透過 app.popover.create
建立彈出視窗),則可以透過 data-
屬性傳遞所有可用的彈出視窗參數。例如
<!-- Pass parameters as kebab-case data attributes -->
<div class="popover" data-close-on-escape="true" data-backdrop="false">
...
</div>
彈出視窗方法與屬性
因此,若要建立彈出視窗,我們必須呼叫
var popover = app.popover.create({ /* parameters */ })
之後,我們會取得其初始化的執行個體(如上例中的 popover
變數),其中包含有用的方法和屬性
屬性 | |
---|---|
popover.app | 連結至全域應用程式執行個體 |
popover.el | 彈出視窗 HTML 元素 |
popover.$el | 具有彈出視窗 HTML 元素的 Dom7 執行個體 |
popover.backdropEl | 背景 HTML 元素 |
popover.$backdropEl | 具有背景 HTML 元素的 Dom7 執行個體 |
popover.targetEl | 彈出視窗目標 HTML 元素 |
popover.$targetEl | 具有彈出視窗目標 HTML 元素的 Dom7 執行個體 |
popover.params | 彈出視窗參數 |
popover.opened | 布林值屬性,表示彈出視窗是否已開啟 |
方法 | |
popover.open(targetEl, animate) | 在目標元素周圍開啟彈出視窗。其中
|
popover.open(animate) | 在彈出視窗建立時傳遞的目標元素周圍開啟彈出視窗。其中
|
popover.close(animate) | 關閉彈出視窗。其中
|
popover.destroy() | 銷毀彈出視窗 |
popover.on(event, handler) | 新增事件處理程序 |
popover.once(event, handler) | 新增事件處理程序,將在觸發後移除 |
popover.off(event, handler) | 移除事件處理程序 |
popover.off(event) | 移除指定事件的所有處理程序 |
popover.emit(event, ...args) | 在執行個體上觸發事件 |
使用連結控制彈出視窗
可以使用連結上的特殊類別和資料屬性,開啟和關閉所需的彈出視窗(如果您在 DOM 中有彈出視窗)
若要開啟彈出視窗,我們需要將「popover-open」類別新增到任何 HTML 元素(建議使用連結)
若要關閉彈出視窗,我們需要將「popover-close」類別新增到任何 HTML 元素(建議使用連結)
如果您在 DOM 中有多個彈出視窗,則需要透過此 HTML 元素上的其他 data-popover=".my-popover" 屬性,指定適當的彈出視窗
根據上述說明
<!-- In data-popover attribute we specify CSS selector of popover we need to open -->
<p><a href="#" data-popover=".my-popover" class="popover-open">Open Popover</a></p>
<!-- And somewhere in DOM -->
<div class="popover my-popover">
<div class="popover-inner">
<!-- Link to close popover -->
<a class="link popover-close">Close Popover</a>
</div>
</div>
彈出視窗事件
彈出視窗將在彈出視窗元素上觸發下列 DOM 事件,以及在應用程式和彈出視窗執行個體上觸發事件
DOM 事件
事件 | 目標 | 說明 |
---|---|---|
popover:open | 彈出視窗元素<div class="popover"> | 當彈出視窗開始其開啟動畫時,將觸發事件 |
popover:opened | 彈出視窗元素<div class="popover"> | Popover 完成開啟動畫後觸發事件 |
popover:close | 彈出視窗元素<div class="popover"> | Popover 開始關閉動畫時觸發事件 |
popover:closed | 彈出視窗元素<div class="popover"> | Popover 完成關閉動畫後觸發事件 |
App 和 Popover 執行個體事件
Popover 執行個體會在自身執行個體和 app 執行個體上發出事件。App 執行個體事件具有相同名稱,但前面加上 popover
。
事件 | 參數 | 目標 | 說明 |
---|---|---|---|
open | popover | popover | Popover 開始開啟動畫時觸發事件。事件處理常式會收到 popover 執行個體作為參數 |
popoverOpen | popover | app | |
opened | popover | popover | Popover 完成開啟動畫後觸發事件。事件處理常式會收到 popover 執行個體作為參數 |
popoverOpened | popover | app | |
close | popover | popover | Popover 開始關閉動畫時觸發事件。事件處理常式會收到 popover 執行個體作為參數 |
popoverClose | popover | app | |
closed | popover | popover | Popover 完成關閉動畫後觸發事件。事件處理常式會收到 popover 執行個體作為參數 |
popoverClosed | popover | app | |
beforeDestroy | popover | popover | Popover 執行個體即將被銷毀之前觸發事件。事件處理常式會收到 popover 執行個體作為參數 |
popoverBeforeDestroy | popover | app |
CSS 變數
以下是相關 CSS 變數 (CSS 自訂屬性) 清單。
:root {
--f7-popover-width: 260px;
}
.ios {
--f7-popover-border-radius: 13px;
--f7-popover-actions-icon-size: 28px;
--f7-popover-transition-timing-function: initial;
--f7-popover-bg-color: rgba(255, 255, 255, 0.95);
--f7-popover-actions-label-text-color: rgba(0, 0, 0, 0.45);
}
.ios .dark,
.ios.dark {
--f7-popover-bg-color: rgba(30, 30, 30, 0.95);
--f7-popover-actions-label-text-color: rgba(255, 255, 255, 0.55);
}
.md {
--f7-popover-transition-timing-function: cubic-bezier(0, 0.8, 0.34, 1);
--f7-popover-border-radius: 28px;
--f7-popover-actions-icon-size: 24px;
}
.md,
.md .dark,
.md [class*='color-'] {
--f7-popover-bg-color: var(--f7-md-surface-3);
--f7-popover-actions-label-text-color: var(--f7-md-on-surface-variant);
}
範例
<div class="page">
<div class="navbar">
<div class="navbar-bg"></div>
<div class="navbar-inner sliding">
<div class="title">Popover</div>
<div class="right">
<a class="link popover-open" data-popover=".popover-menu">Popover</a>
</div>
</div>
</div>
<div class="toolbar toolbar-bottom">
<div class="toolbar-inner">
<a href="" class="link popover-open" data-popover=".popover-menu">Dummy Link</a>
<a href="" class="link popover-open" data-popover=".popover-menu">Open Popover</a>
</div>
</div>
<div class="page-content">
<div class="block">
<p><a data-popover=".popover-menu" class="button button-fill popover-open">Open popover on me</a></p>
<p>Mauris fermentum neque et luctus venenatis. Vivamus a sem rhoncus, ornare tellus eu, euismod mauris. In porta
turpis at semper convallis. Duis adipiscing leo eu nulla lacinia, quis rhoncus metus condimentum. Etiam nec
malesuada nibh. Maecenas quis lacinia nisl, vel posuere dolor. Vestibulum condimentum, nisl ac vulputate
egestas, neque enim dignissim elit, rhoncus volutpat magna enim a est. Aenean sit amet ligula neque. Cras
suscipit rutrum enim. Nam a odio facilisis, elementum tellus non, <a class="popover-open"
data-popover=".popover-menu">popover</a> tortor. Pellentesque felis eros, dictum vitae lacinia quis, lobortis
vitae ipsum. Cras vehicula bibendum lorem quis imperdiet.</p>
<p>In hac habitasse platea dictumst. Etiam varius, ante vel ornare facilisis, velit massa rutrum dolor, ac porta
magna magna lacinia nunc. Curabitur <a class="popover-open" data-popover=".popover-menu">popover!</a> cursus
laoreet. Aenean vel tempus augue. Pellentesque in imperdiet nibh. Mauris rhoncus nulla id sem suscipit volutpat.
Pellentesque ac arcu in nisi viverra pulvinar. Nullam nulla orci, bibendum sed ligula non, ullamcorper iaculis
mi. In hac habitasse platea dictumst. Praesent varius at nisl eu luctus. Cras aliquet porta est. Quisque
elementum quis dui et consectetur. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
ridiculus mus. Sed sed laoreet purus. Pellentesque eget ante ante.</p>
<p>Duis et ultricies nibh. Sed facilisis turpis urna, ac imperdiet erat venenatis eu. Proin sit amet faucibus
tortor, et varius sem. Etiam vitae lacinia neque. Aliquam nisi purus, interdum in arcu sed, ultrices rutrum
arcu. Nulla mi turpis, consectetur vel enim quis, facilisis viverra dui. Aliquam quis convallis tortor, quis
semper ligula. Morbi ullamcorper <a class="popover-open" data-popover=".popover-menu">one more popover</a> massa
at accumsan. Etiam purus odio, posuere in ligula vitae, viverra ultricies justo. Vestibulum nec interdum nisi.
Aenean ac consectetur velit, non malesuada magna. Sed pharetra vehicula augue, vel venenatis lectus gravida
eget. Curabitur lacus tellus, venenatis eu arcu in, interdum auctor nunc. Nunc non metus neque. Suspendisse
viverra lectus sed risus aliquet, vel accumsan dolor feugiat.</p>
</div>
</div>
<div class="popover popover-menu">
<div class="popover-angle"></div>
<div class="popover-inner">
<div class="list">
<ul>
<li><a href="/dialog/" class="list-button popover-close">Dialog</a></li>
<li><a href="/tabs/" class="list-button popover-close">Tabs</a></li>
<li><a href="/panel/" class="list-button popover-close">Side Panels</a></li>
<li><a href="/list/" class="list-button popover-close">List View</a></li>
<li><a href="/inputs/" class="list-button popover-close">Form Inputs</a></li>
</ul>
</div>
</div>
</div>
</div>