表格模态
Sheet Modal 是一种特殊的覆盖类型,类似于 Picker/Calendar 的覆盖层。这种模态允许创建具有自定义内容的自定义覆盖层
Sheet布局
Sheet 布局相当简单:
<body>
...
<!-- Sheet Modal Container -->
<div class="sheet-modal">
<!-- Sheet Modal Toolbar, optional -->
<div class="toolbar">
<div class="toolbar-inner">
<div class="left"></div>
<div class="right">
<a href="#" class="link sheet-close">Done</a>
</div>
</div>
</div>
<!-- Sheet Modal Inner -->
<div class="sheet-modal-inner">
<!-- Sheet Modal content -->
<div class="block">
<p>Integer mollis nulla id nibh elementum finibus...</p>
</div>
</div>
</div>
</body>
Sheet顶部布局
默认情况下,Sheet Modal 从屏幕底部打开。也可以从屏幕顶部打开它。在这种情况下,我们需要向 Sheet 元素添加sheet-modal-top
类。在这种情况下,还建议使用底部工具栏:
<!-- Additional "sheet-modal-top" class to open it from top -->
<div class="sheet-modal sheet-modal-top">
<!-- Bottom toolbar for top sheet -->
<div class="toolbar toolbar-bottom">
<div class="toolbar-inner">
<div class="left"></div>
<div class="right">
<a href="#" class="link sheet-close">Done</a>
</div>
</div>
</div>
<!-- Sheet Modal Inner -->
<div class="sheet-modal-inner">
<!-- Sheet Modal content -->
<div class="block">
<p>Integer mollis nulla id nibh elementum finibus...</p>
</div>
</div>
</div>
Sheet应用方法
让我们看看与 Sheet 相关的 App 方法来处理 Sheet:
app.sheet.create(参数)- 创建 Sheet 实例
- 参数 - 对象. Sheet 参数对象
方法返回创建的 Sheet 实例
app.sheet.destroy(el)- 销毁 Sheet 实例
- el - HTMLElement或字符串(使用 CSS 选择器) 或对象. 要销毁的 Sheet 元素或 Sheet 实例。
app.sheet.get(el)- 通过 HTML 元素获取 Sheet 实例
- el - HTMLElement或字符串(使用 CSS 选择器)。Sheet 元素。
方法返回 Sheet 实例
app.sheet.open(el, animate)- 打开 Sheet
- el - HTMLElement或字符串(使用 CSS 选择器)。要打开的 Sheet 元素。
- animate - 布尔值. 使用动画打开 Sheet。
方法返回 Sheet 实例
app.sheet.close(el, animate)- 关闭 Sheet
- el - HTMLElement或字符串(使用 CSS 选择器)。要关闭的 Sheet 元素。
- animate - 布尔值. 使用动画关闭 Sheet。
方法返回 Sheet 实例
app.sheet.stepOpen(el)- 打开/展开 Sheet 滑动步骤
- el - HTMLElement或字符串(使用 CSS 选择器)。要打开滑动步骤的 Sheet 元素。
方法返回 Sheet 实例
app.sheet.stepClose(el)- 关闭/折叠 Sheet 滑动步骤
- el - HTMLElement或字符串(使用 CSS 选择器)。要关闭滑动步骤的 Sheet 元素。
方法返回 Sheet 实例
app.sheet.stepToggle(el)- 切换(打开或关闭)Sheet 滑动步骤
- el - HTMLElement或字符串(使用 CSS 选择器)。要切换滑动步骤的 Sheet 元素。
方法返回 Sheet 实例
app.sheet.setBreakpoint(el, 值)- 在特定断点设置/打开 Sheet Modal(从breakpoints
数组参数)。同时传递0
将关闭 Sheet Modal,传递1
将完全打开它
方法返回 Sheet 实例
Sheet参数
现在让我们看看创建 Sheet 需要的可用参数列表:
参数 | 类型 | 默认 | 描述 |
---|---|---|---|
el | HTMLElement | Sheet 元素。如果你已经在 HTML 中有 Sheet 元素,并想使用这个元素创建新的实例,则很有用 | |
内容 | 字符串 | 完整的 Sheet HTML 布局字符串。如果你想动态创建 Sheet 元素,则很有用 | |
背景遮罩 | 布尔值 | 启用 Sheet 背景层(暗色半透明层)。默认情况下它是true 对于 MD 主题和false 对于 iOS 主题 | |
backdropEl | HTMLElement 字符串 | 自定义背景元素的HTML元素或字符串CSS选择器 | |
backdropUnique | 布尔值 | false | 如果启用,它将为该模态创建唯一的背景元素 |
scrollToEl | HTMLElement 字符串 | 元素的 HTML 元素或字符串(使用 CSS 选择器)。如果指定,则 Sheet 将尝试在打开时滚动页面内容到该元素 | |
closeByBackdropClick | 布尔值 | true | 当启用时,将在背景层点击时关闭 |
closeByOutsideClick | 布尔值 | false | 当启用时,将在点击其外部时关闭 |
closeOnEscape | 布尔值 | false | 当启用时,将在按 ESC 键时关闭 |
animate | 布尔值 | true | Sheet 是否应该使用动画打开/关闭。可以在.open() 和.close() 方法中覆盖。 |
swipeToClose | 布尔值 | false | Sheet是否可以用滑动手势关闭 |
swipeToStep | 布尔值 | false | 当启用时,可以将其分为两种状态:部分打开和完全打开,可以通过滑动控制 |
swipeHandler | HTMLElement 字符串 | 如果未传递,则整个Sheet都可以滑动关闭。您可以在此处传递HTML元素或字符串CSS选择器,该元素将用作滑动目标。(必须启用)swipeToClose 或swipeToStep push | |
push | 布尔值 | false | 当启用时,打开时将视图推到后面。仅在顶部安全区域存在时才有效。也可以通过向Sheet元素添加sheet-modal-push 类来启用 |
breakpoints | number[] | [] | 用作swipeToStep 启用滑动断点的替代方法。必须是一个大于0小于1的数字数组,其中0是完全关闭,1是完全打开,例如[0.33, 0.66] , [0.5] ,等等。 |
backdropBreakpoint | 数字 | 0 | 定义背景遮罩变为可见的断点。数字从0 (理想的是breakpoints 数组的最低(第一个)值)到1 (默认0) |
pushBreakpoint | 数字 | 0 | 定义何时将视图推到后面(push 必须启用)。数字从0 (理想的是breakpoints 数组的最低(第一个)值)到1 (默认0) |
containerEl | HTMLElement 字符串 | 模态挂载到的元素(默认为应用根元素) | |
on | 对象 | 带有事件处理程序的对象。例如:
|
注意,所有以下参数都可以在sheet
属性下的全局 App 参数中用于为所有 Sheet 设置默认值。例如:
var app = new Framework7({
sheet: {
closeByBackdropClick: false,
}
});
如果你使用自动初始化的 Sheet Modal(例如,你通过app.sheet.create
创建它们),则可以通过data-
属性传递所有可用的 Sheet 参数。例如:
<!-- Pass parameters as kebab-case data attributes -->
<div class="sheet-modal" data-close-on-escape="true" data-swipe-to-close="true">
...
</div>
Sheet方法和属性
所以要创建 Sheet,我们必须调用:
var sheet = app.sheet.create({ /* parameters */ })
之后我们就有其初始化的实例(如sheet
示例中上面的变量)以及有用的方法和属性:
属性 | |
---|---|
sheet.app | 链接到全局应用实例 |
sheet.el | Sheet HTML 元素 |
sheet.$el | 包含 Sheet HTML 元素的 Dom7 实例 |
sheet.backdropEl | 背景层 HTML 元素 |
sheet.$backdropEl | 包含背景层 HTML 元素的 Dom7 实例 |
sheet.params | Sheet 参数 |
sheet.opened | 指示 Sheet 是否打开的布尔属性 |
方法 | |
sheet.open(animate) | 打开 Sheet。其中
|
sheet.close(animate) | 关闭 Sheet。其中
|
sheet.stepOpen() | 打开/展开 Sheet 滑动步骤 |
sheet.stepClose() | 关闭/折叠 Sheet 滑动步骤 |
sheet.stepToggle() | 切换(打开或关闭)Sheet 滑动步骤 |
sheet.setSwipeStep() | 更新步骤位置。当打开时手动修改 Sheet Modal 内容后需要调用 |
sheet.setBreakpoint(值) | 在特定断点设置/打开 Sheet Modal(从breakpoints 数组参数)。同时传递0 将关闭 Sheet Modal,传递1 将完全打开它 |
sheet.destroy() | 销毁 Sheet |
sheet.on(事件上触发, 处理程序) | 添加事件处理程序 |
sheet.once(事件上触发, 处理程序) | 添加在触发后将被移除的事件处理程序 |
sheet.off(事件上触发, 处理程序) | 移除事件处理程序 |
sheet.off(事件上触发) | 移除指定事件的所有处理程序 |
sheet.emit(事件上触发, ...args) | 在实例上触发事件 |
使用链接控制Sheet
可以使用特殊类和数据属性在链接上打开和关闭所需的 Sheet(如果你在 DOM 中有它们):
要打开 Sheet,我们需要向任何 HTML 元素(最好是指针)添加 "sheet-open" 类
要关闭 Sheet,我们需要向任何 HTML 元素(最好是指针)添加 "sheet-close" 类
如果你 DOM 中有多个 Sheet,你需要通过额外的data-sheet=".my-sheet"属性在这个 HTML 元素上指定适当的 Sheet
根据上述说明:
<!-- In data-sheet attribute we specify CSS selector of sheet we need to open -->
<p><a href="#" data-sheet=".my-sheet" class="sheet-open">Open Sheet</a></p>
<!-- And somewhere in DOM -->
<div class="sheet-modal my-sheet">
<div class="sheet-modal-inner">
<!-- Link to close sheet -->
<a class="link sheet-close">Close</a>
</div>
</div>
滑动步骤
如果你传递swipeToStep
参数,则 Sheet 将部分打开,并且可以通过滑动进一步展开。为了使其工作,我们还需要在 Sheet HTML 中定义第一个/初始步骤,以便 Framework7 知道 Sheet 应该打开多少。
为了使其工作,我们需要用<div class="sheet-modal-swipe-step">
元素包装初始 Sheet 内容,并在该 Sheet Modal 上设置height:auto
:
<div class="sheet-modal" style="height: auto">
<div class="sheet-modal-inner">
<!-- initial sheet modal content -->
<div class="sheet-modal-swipe-step">
...
</div>
<!-- rest of the content that will be opened with extra swipe -->
...
</div>
</div>
对于顶部位置的 Sheet Modal,这个滑动步骤应该在底部:
<div class="sheet-modal sheet-modal-top" style="height: auto">
<div class="sheet-modal-inner">
<!-- rest of the content that will be opened with extra swipe -->
...
<!-- initial sheet modal content -->
<div class="sheet-modal-swipe-step">
...
</div>
</div>
</div>
Sheet事件
Sheet 将在 Sheet 元素上触发以下 DOM 事件,以及在 App 和 Sheet 实例上触发事件:
DOM 事件
事件 | Target | 描述 |
---|---|---|
sheet:open | Sheet元素<div class="sheet"> | 当 Sheet 开始其打开动画时将触发事件 |
sheet:opened | Sheet元素<div class="sheet"> | Sheet 完成其打开动画后将触发事件 |
sheet:close | Sheet元素<div class="sheet"> | 当Sheet开始关闭动画时将触发事件 |
sheet:closed | Sheet元素<div class="sheet"> | 当Sheet完成关闭动画时将触发事件 |
sheet:stepopen | Sheet元素<div class="sheet"> | 在Sheet滑动步骤打开/展开时触发事件 |
sheet:stepclose | Sheet元素<div class="sheet"> | 在Sheet滑动步骤关闭/折叠时触发事件 |
sheet:stepprogress | Sheet元素<div class="sheet"> | 当Sheet在打开和关闭状态之间的滑动步骤上触发事件。它接收步骤打开进度数字(来自event.detail sheet:beforedestroy0 到1 ) |
sheet:breakpoint | Sheet元素<div class="sheet"> | 当Sheet在打开和关闭状态之间的滑动步骤上触发事件。它接收步骤打开进度数字(来自event.detail sheet:beforedestroy0 到1 ) |
sheet:beforedestroy | Sheet元素<div class="sheet"> | 当Sheet断点改变时将触发事件。它接收当前断点(来自event.detail App和Sheet实例事件0 到1 ) |
App和Sheet实例事件
Sheet实例在自身实例和应用程序实例上发出事件。应用程序实例事件具有相同名称,以popup
.
事件 | 参数 | Target | 描述 |
---|---|---|---|
open为前缀 | 表格 | 表格 | 当Sheet开始打开动画时将触发事件。作为参数,事件处理程序接收Sheet实例 |
sheetOpen | 表格 | app | |
opened | 表格 | 表格 | 当Sheet完成打开动画时将触发事件。作为参数,事件处理程序接收Sheet实例 |
sheetOpened | 表格 | app | |
close | 表格 | 表格 | 当Sheet开始关闭动画时将触发事件。作为参数,事件处理程序接收Sheet实例 |
sheetClose | 表格 | app | |
closed | 表格 | 表格 | 当Sheet完成关闭动画时将触发事件。作为参数,事件处理程序接收Sheet实例 |
sheetClosed | 表格 | app | |
beforeDestroy | 表格 | 表格 | 在Sheet实例将被销毁之前将触发事件。作为参数,事件处理程序接收Sheet实例 |
sheetBeforeDestroy | 表格 | app | |
stepOpen | 表格 | 表格 | 在Sheet滑动步骤打开/展开时触发事件 |
sheetStepOpen | 表格 | app | |
stepClose | 表格 | 表格 | 在Sheet滑动步骤关闭/折叠时触发事件 |
sheetStepClose | 表格 | app | |
stepProgress | sheet,progress | 表格 | 当Sheet在打开和关闭状态之间的滑动步骤上触发事件。它接收步骤打开进度数字(来自progress sheet:beforedestroy0 到1 ) |
sheetStepProgress | sheet,progress | app | |
断点 | sheet,breakpoint | 表格 | 在Sheet断点更改时触发事件。作为第二个参数,它接收当前断点(从0 到1 ) |
sheetBreakpoint | sheet,breakpoint | app |
CSS 变量
以下是相关CSS 变量(CSS 自定义属性) 的列表。
:root {
--f7-sheet-height: 260px;
--f7-sheet-push-offset: var(--f7-safe-area-top);
}
.ios {
--f7-sheet-border-radius: 0px;
--f7-sheet-border-color: var(--f7-bars-border-color);
--f7-sheet-transition-timing-function: initial;
--f7-sheet-push-border-radius: 10px;
--f7-sheet-transition-duration: 300ms;
--f7-sheet-bg-color: #fff;
}
.ios .dark,
.ios.dark {
--f7-sheet-bg-color: #202020;
}
.md {
--f7-sheet-border-radius: 16px;
--f7-sheet-push-border-radius: 16px;
--f7-sheet-border-color: transparent;
--f7-sheet-transition-timing-function: cubic-bezier(0, 0.8, 0.34, 1);
--f7-sheet-transition-duration: 400ms;
}
.md,
.md .dark,
.md [class*='color-'] {
--f7-sheet-bg-color: var(--f7-md-surface);
}
示例
<template>
<div class="page">
<div class="navbar">
<div class="navbar-bg"></div>
<div class="navbar-inner sliding">
<div class="title">Sheet Modal</div>
</div>
</div>
<div class="page-content">
<div class="block block-strong-ios block-outline-ios">
<p>Sheet Modals slide up from the bottom (or down from the top) of the screen to reveal more content. Such
modals allow to create custom overlays with custom content.</p>
<p class="grid grid-cols-2 grid-gap">
<a class="button button-fill sheet-open" data-sheet=".demo-sheet">Open Sheet</a>
<a class="button button-fill" @click=${createSheet}>Dynamic Sheet</a>
</p>
<p>
<a class="button button-fill sheet-open" data-sheet=".demo-sheet-top">Top Sheet</a>
</p>
</div>
<div class="block-title">Push View</div>
<div class="block block-strong-ios block-outline-ios">
<p>Sheet can push view behind on open. By default it has effect only when <code>safe-area-inset-top</code> is
more than
zero (iOS fullscreen webapp or iOS cordova app)</p>
<p>
<a class="button button-fill sheet-open" data-sheet=".demo-sheet-push">Sheet Push</a>
</p>
</div>
<div class="block-title">Swipeable Sheet</div>
<div class="block block-strong-ios block-outline-ios">
<p>Sheet modal can be closed with swipe to top (for top Sheet) or bottom (for default Bottom sheet):</p>
<p>
<a class="button button-fill sheet-open" data-sheet=".demo-sheet-swipe-to-close">Swipe To Close</a>
</p>
<p>Also there is swipe-step that can be set on Sheet modal to expand it with swipe:</p>
<p>
<a class="button button-fill sheet-open" data-sheet=".demo-sheet-swipe-to-step">Swipe To Step</a>
</p>
<p>In addition to "swipe step" there is a support for position breakpoints (multiple steps):</p>
<p>
<a class="button button-fill sheet-open" data-sheet=".demo-sheet-breakpoints">Breakpoints</a>
</p>
</div>
</div>
<div class="sheet-modal demo-sheet">
<div class="toolbar">
<div class="toolbar-inner">
<div class="left"></div>
<div class="right">
<a class="link sheet-close">Close</a>
</div>
</div>
</div>
<div class="sheet-modal-inner">
<div class="page-content">
<div class="block">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quae ducimus dolorum ipsa aliquid accusamus
perferendis laboriosam delectus numquam minima animi, libero illo in tempora harum sequi corporis alias ex
adipisci.</p>
<p>Sunt magni enim saepe quasi aspernatur delectus consectetur fugiat necessitatibus qui sed, similique quis
facere tempora, laudantium quae expedita ea, aperiam dolores. Aut deserunt soluta alias magnam.
Consequatur, nisi, enim.</p>
<p>Eaque maiores ducimus, impedit unde culpa qui, explicabo accusamus, non vero corporis voluptatibus
similique odit ab. Quaerat quasi consectetur quidem libero? Repudiandae adipisci vel voluptatum, autem
libero minus dignissimos repellat.</p>
<p>Iusto, est corrupti! Totam minus voluptas natus esse possimus nobis, delectus veniam expedita sapiente ut
cum reprehenderit aliquid odio amet praesentium vero temporibus obcaecati beatae aspernatur incidunt,
perferendis voluptates doloribus?</p>
<p>Illum id laborum tempore, doloribus culpa labore ex iusto odit. Quibusdam consequuntur totam nam
obcaecati, enim cumque nobis, accusamus, quos voluptates, voluptatibus sapiente repellendus nesciunt
praesentium velit ipsa illo iusto.</p>
</div>
</div>
</div>
</div>
<div class="sheet-modal sheet-modal-top demo-sheet-top">
<div class="toolbar toolbar-bottom">
<div class="toolbar-inner">
<div class="left"></div>
<div class="right">
<a class="link sheet-close">Close</a>
</div>
</div>
</div>
<div class="sheet-modal-inner">
<div class="page-content">
<div class="block">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quae ducimus dolorum ipsa aliquid accusamus
perferendis laboriosam delectus numquam minima animi, libero illo in tempora harum sequi corporis alias ex
adipisci.</p>
<p>Sunt magni enim saepe quasi aspernatur delectus consectetur fugiat necessitatibus qui sed, similique quis
facere tempora, laudantium quae expedita ea, aperiam dolores. Aut deserunt soluta alias magnam.
Consequatur, nisi, enim.</p>
<p>Eaque maiores ducimus, impedit unde culpa qui, explicabo accusamus, non vero corporis voluptatibus
similique odit ab. Quaerat quasi consectetur quidem libero? Repudiandae adipisci vel voluptatum, autem
libero minus dignissimos repellat.</p>
<p>Iusto, est corrupti! Totam minus voluptas natus esse possimus nobis, delectus veniam expedita sapiente ut
cum reprehenderit aliquid odio amet praesentium vero temporibus obcaecati beatae aspernatur incidunt,
perferendis voluptates doloribus?</p>
<p>Illum id laborum tempore, doloribus culpa labore ex iusto odit. Quibusdam consequuntur totam nam
obcaecati, enim cumque nobis, accusamus, quos voluptates, voluptatibus sapiente repellendus nesciunt
praesentium velit ipsa illo iusto.</p>
</div>
</div>
</div>
</div>
<div class="sheet-modal demo-sheet-push">
<div class="toolbar">
<div class="toolbar-inner">
<div class="left"></div>
<div class="right">
<a class="link sheet-close">Close</a>
</div>
</div>
</div>
<div class="sheet-modal-inner">
<div class="page-content">
<div class="block">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quae ducimus dolorum ipsa aliquid accusamus
perferendis laboriosam delectus numquam minima animi, libero illo in tempora harum sequi corporis alias ex
adipisci.</p>
<p>Sunt magni enim saepe quasi aspernatur delectus consectetur fugiat necessitatibus qui sed, similique quis
facere tempora, laudantium quae expedita ea, aperiam dolores. Aut deserunt soluta alias magnam.
Consequatur, nisi, enim.</p>
<p>Eaque maiores ducimus, impedit unde culpa qui, explicabo accusamus, non vero corporis voluptatibus
similique odit ab. Quaerat quasi consectetur quidem libero? Repudiandae adipisci vel voluptatum, autem
libero minus dignissimos repellat.</p>
<p>Iusto, est corrupti! Totam minus voluptas natus esse possimus nobis, delectus veniam expedita sapiente ut
cum reprehenderit aliquid odio amet praesentium vero temporibus obcaecati beatae aspernatur incidunt,
perferendis voluptates doloribus?</p>
<p>Illum id laborum tempore, doloribus culpa labore ex iusto odit. Quibusdam consequuntur totam nam
obcaecati, enim cumque nobis, accusamus, quos voluptates, voluptatibus sapiente repellendus nesciunt
praesentium velit ipsa illo iusto.</p>
</div>
</div>
</div>
</div>
<div class="sheet-modal demo-sheet-swipe-to-close" style="height:auto">
<div class="sheet-modal-inner">
<div class="swipe-handler"></div>
<div class="page-content">
<div class="block-title block-title-large">Hello!</div>
<div class="block">
<p>Eaque maiores ducimus, impedit unde culpa qui, explicabo accusamus, non vero corporis voluptatibus
similique odit ab. Quaerat quasi consectetur quidem libero? Repudiandae adipisci vel voluptatum, autem
libero minus dignissimos repellat.</p>
<p>Iusto, est corrupti! Totam minus voluptas natus esse possimus nobis, delectus veniam expedita sapiente ut
cum reprehenderit aliquid odio amet praesentium vero temporibus obcaecati beatae aspernatur incidunt,
perferendis voluptates doloribus?</p>
</div>
</div>
</div>
</div>
<div class="sheet-modal demo-sheet-swipe-to-step" style="height:auto">
<div class="sheet-modal-inner">
<div class="swipe-handler"></div>
<div class="sheet-modal-swipe-step">
<div class="display-flex padding justify-content-space-between align-items-center">
<div style="font-size: 18px"><b>Total:</b></div>
<div style="font-size: 22px"><b>$500</b></div>
</div>
<div class="padding-horizontal padding-bottom">
<a class="button button-large button-fill">Make Payment</a>
<div class="margin-top text-align-center">Swipe up for more details</div>
</div>
</div>
<div class="block-title block-title-medium margin-top">Your order:</div>
<div class="list no-hairlines">
<ul>
<li class="item-content">
<div class="item-inner">
<div class="item-title">Item 1</div>
<div class="item-after"><b>$200</b></div>
</div>
</li>
<li class="item-content">
<div class="item-inner">
<div class="item-title">Item 2</div>
<div class="item-after"><b>$180</b></div>
</div>
</li>
<li class="item-content">
<div class="item-inner">
<div class="item-title">Delivery</div>
<div class="item-after"><b>$120</b></div>
</div>
</li>
</ul>
</div>
</div>
</div>
<div class="sheet-modal demo-sheet-breakpoints" style="height:auto">
<div class="sheet-modal-inner">
<div class="swipe-handler" style="background-color: transparent;"></div>
<div style="display: flex; align-items: center; justify-content: center; height: 20vh;">
Section 1</div>
<div style="display: flex; align-items: center; justify-content: center; height: 20vh;">
Section 2</div>
<div style="display: flex; align-items: center; justify-content: center; height: 20vh;">
Section 3</div>
</div>
</div>
</div>
</template>
<script>
export default (props, { $f7, $on }) => {
let sheet;
let sheetPush;
let sheetSwipeToClose;
let sheetSwipeToStep;
let sheetBreakpoints;
const toggleSwipeStep = () => {
sheetSwipeToStep.stepToggle();
}
const createSheet = () => {
// Create sheet modal
if (!sheet) {
sheet = $f7.sheet.create({
content: '\
<div class="sheet-modal">\
<div class="toolbar">\
<div class="toolbar-inner justify-content-flex-end">\
<a class="link sheet-close">Close</a>\
</div>\
</div>\
<div class="sheet-modal-inner">\
<div class="page-content">\
<div class="block">\
<p>This sheet modal 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>\
'
});
}
// Close inline sheet
if ($('.demo-sheet.modal-in').length > 0) $f7.sheet.close('.demo-sheet');
// Open it
sheet.open();
}
$on('pageInit', () => {
sheetPush = $f7.sheet.create({
el: '.demo-sheet-push',
push: true,
backdrop: true,
});
sheetSwipeToClose = $f7.sheet.create({
el: '.demo-sheet-swipe-to-close',
swipeToClose: true,
push: true,
backdrop: true,
});
sheetSwipeToStep = $f7.sheet.create({
el: '.demo-sheet-swipe-to-step',
swipeToClose: true,
swipeToStep: true,
push: true,
backdrop: true,
});
sheetBreakpoints = $f7.sheet.create({
el: '.demo-sheet-breakpoints',
swipeToClose: true,
breakpoints: [0.33, 0.66],
backdrop: true,
backdropBreakpoint: 0.66,
push: true,
pushBreakpoint: 0.66,
});
});
$on('pageBeforeOut', () => {
// Close opened sheets on page out
$f7.sheet.close();
});
$on('pageBeforeRemove', () => {
// Destroy sheet modal when page removed
if (sheet) sheet.destroy();
if (sheetPush) sheetPush.destroy();
if (sheetSwipeToClose) sheetSwipeToClose.destroy();
if (sheetSwipeToStep) sheetSwipeToStep.destroy();
if (sheetBreakpoints) sheetBreakpoints.destroy();
});
return $render;
};
</script>