弹出
弹出组件用于管理弹出窗口中内容的显示。弹出窗口用于临时显示信息。在用户点击弹出窗口外或明确地将其关闭之前,弹出窗口将一直保持显示状态。
请注意,不建议在小屏幕(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 - boolean。使用动画关闭弹出框。
该方法返回弹出框的实例
弹出框参数
现在,让我们看一看创建弹出框所需的一系列可用参数
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
el | HTMLElement | 弹出框元素。如果您已在 HTML 中有弹出框元素并想使用此元素创建新实例,这可能有用 | |
arrow | boolean | true | 启用弹出框箭头/角 |
content | string | 完整弹出框 HTML 布局字符串。如果您想动态创建弹出框元素,这可能很有用 | |
verticalPosition | string | auto | 强制设置弹出框的垂直位置,可以是 auto 、top 或 bottom |
backdrop | boolean | true | 启用弹出框的背景(后面显示半透明的深色层) |
backdropUnique | boolean | false | 如果启用,则为该模式创建唯一的背景元素 |
backdropEl | HTMLElement string | 自定义背景元素的 HTML 元素或字符串 CSS 选择器 | |
closeByBackdropClick | boolean | true | 启用后,点击背景可关闭弹出框 |
closeByOutsideClick | boolean | true | 启用时,在点击气泡外部时关闭气泡 |
closeOnEscape | boolean | false | 启用时,按 ESC 键盘键关闭气泡 |
animate | boolean | true | 气泡是否应该带动画打开/关闭。可以在 .open() 和 .close() 方法中覆盖 |
targetEl | HTMLElement string | 目标元素的 HTML 元素或字符串 CSS 选择器 | |
targetX | 数字 | 从屏幕左侧到虚拟目标元素的水平偏移量。在不使用真实目标元素 (targetEl ) 时必需 | |
targetY | 数字 | 从屏幕顶部到虚拟目标元素的垂直偏移量。在不使用真实目标元素 (targetEl ) 时必需 | |
targetWidth | 数字 | 0 | 虚拟目标元素宽度(以像素为单位)。在不使用真实目标元素 (targetEl ) 时必需 |
targetHeight | 数字 | 0 | 虚拟目标元素高度(以像素为单位)。在不使用真实目标元素 (targetEl ) 时必需 |
containerEl | HTMLElement string | 要挂载模式的元素(默认为应用根元素) | |
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(事件, 处理程序) | 移除事件处理程序 |
popover.off(事件) | 移除指定事件的所有处理程序 |
popover.emit(事件, ...args) | 在实例上触发事件 |
通过链接控制 Popover
可以通过链接上具有特殊类和数据特性的使用,来打开和关闭所需的 popover(如果你在 DOM 中有这些 popover)
要打开 popover,我们需要将 "popover-open" 类添加到任何 HTML 元素(最好是链接)
要关闭 popover,我们需要将 "popover-close" 类添加到任何 HTML 元素(最好是链接)
如果你在 DOM 中有多个 popover,你需要通过此 HTML 元素上的附加 data-popover=".my-popover" 特性来指定合适的 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>
Popover 事件
Popover 将在 popover 元素上触发以下 DOM 事件,并在应用程序和 popover 实例上触发事件
DOM 事件
事件 | 目标 | 说明 |
---|---|---|
popover:open | Popover 元素<div class="popover"> | Popover 开始其打开动画后,此事件将被触发 |
popover:opened | Popover 元素<div class="popover"> | Popover 完成其打开动画后,此事件将被触发 |
popover:close | Popover 元素<div class="popover"> | Popover 开始其关闭动画后,此事件将被触发 |
popover:closed | Popover 元素<div class="popover"> | Popover 完成其关闭动画后,此事件将被触发 |
应用程序和 Popover 实例事件
Popover 实例在自身实例和应用程序实例上触发事件。应用程序实例事件具有相同名称,前缀为 popover
。
事件 | 参数 | 目标 | 说明 |
---|---|---|---|
打开 | popover | popover | Popover 开始其打开动画后,此事件将被触发。事件处理程序接收 popover 实例作为参数 |
popoverOpen | popover | 应用程序 | |
已打开 | popover | popover | Popover 完成其打开动画后,此事件将被触发。事件处理程序接收 popover 实例作为参数 |
popoverOpened | popover | 应用程序 | |
关闭 | popover | popover | Popover 开始其关闭动画后,此事件将被触发。事件处理程序接收 popover 实例作为参数 |
popoverClose | popover | 应用程序 | |
已关闭 | popover | popover | Popover 完成其关闭动画后,此事件将被触发。事件处理程序接收 popover 实例作为参数 |
popoverClosed | popover | 应用程序 | |
即将销毁 | popover | popover | Popover 实例即将被销毁前,此事件将被触发。事件处理程序接收 popover 实例作为参数 |
popoverBeforeDestroy | popover | 应用程序 |
CSS 变量
以下是相关的 CSS variables(CSS custom properties) (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>