Popup Vue 组件
Popup 是一个弹出窗口,其中包含任何 HTML 内容,它会弹出显示在应用的主要内容之上。与其他所有覆盖层一样,Popup 也是所谓“临时视图”的一部分。
Popup Vue 组件表示 Popup 组件。
弹出组件
包括以下组件
f7-popup
- 弹出元素
弹出窗口属性
属性 | 类型 | 说明 |
---|---|---|
<f7-popup> 属性 | ||
tablet-fullscreen | 布尔值 | 定义 Popup 在平板电脑上是否全屏显示 |
opened | 布尔值 | 允许打开/关闭 Popup 并设置其初始状态 |
backdrop | 布尔值 | 启用 Popup 遮罩层(后面的深色半透明层)。默认情况继承相同的应用程序参数值 (true ) |
backdrop-el | string object | 自定义遮罩元素的 HTML 元素或字符串 CSS 选择器 |
backdropUnique | 布尔值 | 启用后,它将专门为该模态创建唯一的遮罩元素 |
close-by-backdrop-click | 布尔值 | 启用后,点击遮罩层将关闭弹出层。默认情况继承相同的应用程序参数值 (true ) |
close-on-escape | 布尔值 | 启用后,按 ESC 键盘键将关闭弹出窗口 |
animate | 布尔值 | Popup 是否应使用动画打开/关闭。可以在 .open() 和 .close() 方法中覆盖。默认情况继承相同的应用程序参数值 (true ) |
swipe-to-close | 布尔值 string | Popup 是否可以通过滑动操作关闭。可以是 true ,允许通过向上和向下的滑动关闭弹出,也可以是 to-top (字符串),仅允许向上滑动关闭弹出,或 to-bottom (字符串),仅允许向下滑动关闭。 |
swipe-handler | HTMLElement string | 如果没有传递,则可以通过滑动关闭整个弹出窗口。您可以在此处传递 HTML 元素或用作滑动目标的自定义元素的字符串 CSS 选择器。(swipeToClose 也必须启用) |
push | 布尔值 | 启用后,它会在打开时将视图推送到后面。仅在顶部安全区域到位时才起作用。还可以通过将popup-push 类添加到 Popup 元素来启用它。 |
container-el | HTMLElement string | 要挂载模态的元素(默认为应用程序根元素) |
Popup 事件
事件 | 说明 |
---|---|
<f7-popup> 事件 | |
popup:open | Popup 开始打开动画时将触发该事件 |
popup:opened | Popup 完成打开动画后将触发该事件 |
popup:close | Popup 开始关闭动画时将触发该事件 |
popup:closed | Popup 完成关闭动画后将触发该事件 |
popup:swipestart | 在滑动关闭交互开始时(当用户刚开始拖动弹出窗口时)触发该事件 |
popup:swipemove | 在滑动关闭移动交互时触发该事件 |
popup:swipeend | 在滑动关闭松开时触发该事件 |
popup:swipeclose | 通过滑动关闭弹出窗口时将触发该事件 |
Popup v-model
Popup 组件支持 opened
prop 上的 v-model
<template>
<f7-page>
<f7-popup v-model:opened="isOpened">
...
</f7-popup>
<p>Modal is opened: {{ isOpened }}</p>
</f7-page>
</template>
<script>
export default {
data() {
return {
isOpened: false,
};
}
};
</script>
打开和关闭 Popup
您可以控制 Popup 状态,打开并关闭它
- 使用 Popup API
- 通过向其
opened
prop 传递true
或false
- 通过点击具有相关
popup-open
属性的 链接 或 按钮(将其打开)和popup-close
属性将其关闭
示例
popup.vue
<template>
<f7-page @page:beforeremove="onPageBeforeRemove">
<f7-navbar title="Popup"></f7-navbar>
<f7-block strong-ios outline-ios>
<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>
<f7-button fill popup-open=".demo-popup">Open Popup</f7-button>
</p>
<p>
<f7-button fill @click="popupOpened = true">Open Via Prop Change</f7-button>
</p>
<p>
<f7-button fill @click="createPopup">Create Dynamic Popup</f7-button>
</p>
</f7-block>
<f7-block-title>Swipe To Close</f7-block-title>
<f7-block strong-ios outline-ios>
<p>Popup can be closed with swipe to top or bottom:</p>
<p>
<f7-button fill popup-open=".demo-popup-swipe">Swipe To Close</f7-button>
</p>
<p>
Or it can be closed with swipe on special swipe handler and, for example, only to bottom:
</p>
<p>
<f7-button fill popup-open=".demo-popup-swipe-handler">With Swipe Handler</f7-button>
</p>
</f7-block>
<f7-block-title>Push View</f7-block-title>
<f7-block strong-ios outline-ios>
<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>
<f7-button fill popup-open=".demo-popup-push">Popup Push</f7-button>
</p>
</f7-block>
<f7-popup v-model:opened="popupOpened" class="demo-popup">
<f7-page>
<f7-navbar title="Popup Title">
<f7-nav-right>
<f7-link popup-close>Close</f7-link>
</f7-nav-right>
</f7-navbar>
<f7-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>
</f7-block>
</f7-page>
</f7-popup>
<f7-popup push class="demo-popup-push">
<f7-view>
<f7-page>
<f7-navbar title="Push Popup" large transparent>
<f7-nav-right>
<f7-link popup-close>Close</f7-link>
</f7-nav-right>
</f7-navbar>
<f7-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>
</f7-block>
</f7-page>
</f7-view>
</f7-popup>
<f7-popup class="demo-popup-swipe" swipe-to-close>
<f7-page>
<f7-navbar title="Swipe To Close">
<f7-nav-right>
<f7-link popup-close>Close</f7-link>
</f7-nav-right>
</f7-navbar>
<div style="height: 100%" class="display-flex justify-content-center align-items-center">
<p>Swipe me up or down</p>
</div>
</f7-page>
</f7-popup>
<f7-popup
class="demo-popup-swipe-handler"
swipe-to-close="to-bottom"
swipe-handler=".swipe-handler"
>
<f7-page>
<template #fixed>
<div class="swipe-handler"></div>
</template>
<f7-block-title large>Hello!</f7-block-title>
<f7-block strong-ios outline-ios>
<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>
</f7-block>
</f7-page>
</f7-popup>
</f7-page>
</template>
<script>
import {
f7Navbar,
f7Page,
f7Popup,
f7BlockTitle,
f7Block,
f7NavRight,
f7Link,
f7Button,
f7View,
f7,
} from 'framework7-vue';
export default {
components: {
f7Navbar,
f7Page,
f7Popup,
f7BlockTitle,
f7Block,
f7NavRight,
f7Link,
f7Button,
f7View,
},
data() {
return {
popupOpened: false,
};
},
methods: {
createPopup() {
const self = this;
// Create popup
if (!self.popup) {
self.popup = f7.popup.create({
content: `
<div class="popup">
<div class="page">
<div class="navbar">
<div class="navbar-bg"></div>
<div class="navbar-inner">
<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
self.popup.open();
},
onPageBeforeRemove() {
const self = this;
// Destroy popup when page removed
if (self.popup) self.popup.destroy();
},
},
};
</script>