图表型态

图表型态是一个特殊的覆盖类型,类似于选择器/日历的覆盖。此类模态允许使用自定义内容创建自定义覆盖

图表布局

界面布局非常简洁

<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-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>

表单应用方法

让我们看一下与表单相关的应用方法

app.sheet.create(parameters)——创建表单实例

  • parameters - object。带有表单参数的对象

该方法返回已创建的表单的实例

app.sheet.destroy(el)——销毁表单实例

  • el - HTMLElementstring(带 CSS 选择器)或 object。要销毁的表单元素或表单实例。

app.sheet.get(el)——通过 HTML 元素获取表单实例

  • el - HTMLElementstring(带 CSS 选择器)。表单元素。

该方法返回表单的实例

app.sheet.open(el, animate)——打开表单

  • el - HTMLElementstring(带 CSS 选择器)。要打开的表单元素。
  • animate - boolean。使用动画打开表单。

该方法返回表单的实例

app.sheet.close(el, animate)——关闭表单

  • el - HTMLElementstring(带 CSS 选择器)。要关闭的表单元素。
  • animate - boolean。使用动画关闭表单。

该方法返回表单的实例

app.sheet.stepOpen(el)——打开/展开表单滑动步骤

  • el - HTMLElementstring(带 CSS 选择器)。要打开滑动步骤的表单元素。

该方法返回表单的实例

app.sheet.stepClose(el)——关闭/折叠表单滑动步骤

  • el - HTMLElementstring(带 CSS 选择器)。要关闭滑动步骤的表单元素。

该方法返回表单的实例

app.sheet.stepToggle(el)——切换(打开或关闭)表单滑动步骤

  • el - HTMLElementstring(带 CSS 选择器)。要切换滑动步骤的表单元素。

该方法返回表单的实例

app.sheet.setBreakpoint(el, value)——在特定断点(来自 breakpoints 数组参数)上设置/打开表单模态窗口。此外,传递 0 将关闭表单模态窗口,传递 1 会将其完全打开

该方法返回表单的实例

表单参数

现在我们来看一看创建表单所需的可用参数列表

参数类型默认值说明
elHTMLElement表单元素。如果你在 HTML 中已有表单元素并希望使用此元素来创建新实例,那么此参数会很有用
contentstring完整的 HTML 布局字符串。如果你想动态创建 Sheet 元素,这很有用
背景布尔值启用 Sheet 背景(位于后面的暗半透明层)。默认情况下,MD 主题为 true,而 iOS 主题为 false
backdropElHTMLElement
string
自定义背景的 HTML 元素或字符串 CSS 选择器
backdropUnique布尔值false如果启用,它会专门为该模态创建唯一的背景元素
scrollToElHTMLElement
string
元素的 HTML 元素或字符串(带 CSS 选择器)。如果指定,则在打开时,表单会尝试滚动页面内容到该元素
closeByBackdropClick布尔值true启用时,点击背景会关闭
closeByOutsideClick布尔值false启用时,当点击外部区域时关闭
closeOnEscape布尔值false启用后,ESC 键盘按键将关闭
animate布尔值trueSheet 是否应该通过动画打开/关闭。可以在 .open().close() 方法中覆盖
swipeToClose布尔值falseSheet 是否可以通过轻扫手势关闭
swipeToStep布尔值false启用后,可以将展开的表单拆分为两个状态:部分展开和完全展开,可以使用轻扫操作进行控制
swipeHandlerHTMLElement
string
如果没有传递,则可以轻扫整个 Sheet 来关闭。你可以在此处传递 HTML 元素或将用作轻扫目标的自定义元素的 CSS 选择器字符串。(也必须启用 swipeToCloseswipeToStep
push布尔值false打开时,启用它将向前推进背后的视图。仅当上面的安全区域就位时才有效。它还可以通过添加 sheet-modal-push 类到 Sheet 元素来启用。
断点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)
containerElHTMLElement
string
安装模态框的元素(默认为应用程序根元素)
onobject

带事件处理器的对象。例如

var sheet = app.sheet.create({
  content: '<div class="sheet-modal">...</div>',
  on: {
    opened: function () {
      console.log('Sheet opened')
    }
  }
})

请注意,所有以下参数都可以在 sheet 属性下的全局应用程序参数中使用,以设置所有表单的默认值。例如

var app = new Framework7({
  sheet: {
    closeByBackdropClick: false,
  }
});

如果你使用自动初始化的表单模态框(例如,你不会通过 app.sheet.create 创建它们),可以通过 data- 属性传递所有可用的表单参数。例如

<!-- Pass parameters as kebab-case data attributes -->
<div class="sheet-modal" data-close-on-escape="true" data-swipe-to-close="true">
  ...
</div>

表单方法和属性

所以为了创建表单我们必须调用

var sheet = app.sheet.create({ /* parameters */ })

在那之后,拥有实用方法和属性的初始化实例(如上例中的sheet变量)

属性
sheet.app链接到全局应用实例
sheet.el工作表 HTML 元素
sheet.$el带有工作表 HTML 元素的 Dom7 实例
sheet.backdropEl背景 HTML 元素
sheet.$backdropEl带有背景 HTML 元素的 Dom7 实例
sheet.params工作表参数
sheet.opened布尔值属性指示工作表是否已打开
方法
sheet.open(animate)打开工作表。其中
  • animate - boolean(默认为true) - 定义是否应使用动画将其打开
sheet.close(animate)关闭工作表。其中
  • animate - boolean(默认为true) - 定义是否应使用动画将其关闭
sheet.stepOpen()打开/展开工作表轻扫步骤
sheet.stepClose()关闭/收缩工作表轻扫步骤
sheet.stepToggle()切换(打开或关闭)工作表轻扫步骤
sheet.setSwipeStep()更新步长位置。当打开工作表模式内容时,在手动修改后需要调用此方法
sheet.setBreakpoint(value)在特定断点(来自breakpoints数组参数)上设置/打开工作表模式。此外,传递0会关闭工作表模式,传递1会将其完全打开
sheet.destroy()销毁工作表
sheet.on(event, handler)添加事件处理程序
sheet.once(event, handler)添加在触发后将被删除的事件处理程序
sheet.off(event, handler)移除事件处理程序
sheet.off(event)移除指定事件的所有处理程序
sheet.emit(event, ...args)在实例上触发事件

可以通过链接上的特殊类和数据属性来打开和关闭所需的页面(如果你在 DOM 中有它们)

  • 要打开页面,我们需要在任何 HTML 元素(首选链接)中添加“sheet-open”类

  • 要关闭页面,我们需要在任何 HTML 元素(首选链接)中添加“sheet-close”类

  • 如果在 DOM 中有多个工作表,则需要通过该 HTML 元素上的附加data-sheet=".my-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参数,则工作表将部分打开,并通过轻扫可以进一步展开。要使其发挥作用,我们还需要在工作表 HTML 中定义第一个/初始步骤,以便 Framework7 能够知道工作表应展开多少。

要使其发挥作用,我们需要用<div class="sheet-modal-swipe-step">元素包装初始工作表内容,并在该工作表模式上设置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>

对于顶部定位的工作表模式,此轻扫步骤应位于底部

<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>

工作表事件

工作表将运行以下 DOM 事件和工作表实例的事件

DOM 事件

事件目标说明
工作表:打开工作表元素<div class="sheet">当工作表开始打开动画时,事件将被触发
工作表:已打开工作表元素<div class="sheet">当工作表完成打开动画后,事件将被触发
工作表:关闭工作表元素<div class="sheet">当工作表开始关闭动画时,事件将被触发
工作表:已关闭工作表元素<div class="sheet">当工作表完成关闭动画后,事件将被触发
工作表:步骤已打开工作表元素<div class="sheet">当工作表滑动步骤打开/展开时,事件将被触发
工作表:步骤已关闭工作表元素<div class="sheet">当工作表滑动步骤关闭/折叠时,事件将被触发
工作表:步骤进度工作表元素<div class="sheet">当工作表滑动步骤在步骤打开和关闭状态之间时,事件将被触发。作为 event.detail ,它接收步骤打开进度数字(从 01
工作表:断点工作表元素<div class="sheet">当工作表滑动步骤在步骤打开和关闭状态之间时,事件将被触发。作为 event.detail ,它接收步骤打开进度数字(从 01
工作表:关闭之前工作表元素<div class="sheet">当工作表断点更改时,事件将被触发。作为 event.detail ,它接收当前断点(从 01

应用程序和工作表实例事件

工作表实例在自身实例和应用程序实例上发出事件。应用程序实例事件具有相同名称,前缀为 popup

事件参数目标说明
打开工作表工作表当工作表开始打开动画时,事件将被触发。作为参数,事件处理程序接收工作表实例
工作表已打开工作表应用程序
已打开工作表工作表当工作表完成打开动画后,事件将被触发。作为参数,事件处理程序接收工作表实例
工作表已打开工作表应用程序
关闭工作表工作表当工作表开始关闭动画时,事件将被触发。作为参数,事件处理程序接收工作表实例
工作表关闭工作表应用程序
已关闭工作表工作表当工作表完成关闭动画后,事件将被触发。作为参数,事件处理程序接收工作表实例
工作表已关闭工作表应用程序
关闭之前工作表工作表当工作表实例即将被销毁时,事件将被触发。作为参数,事件处理程序接收工作表实例
工作表关闭之前工作表应用程序
步骤已打开工作表工作表当工作表滑动步骤打开/展开时,事件将被触发
工作表步骤已打开工作表应用程序
步骤已关闭工作表工作表当工作表滑动步骤关闭/折叠时,事件将被触发
工作表步骤已关闭工作表应用程序
步骤进度工作表,进度工作表当工作表滑动步骤在步骤打开和关闭状态之间时,事件将被触发。作为 progress ,它接收步骤打开进度数字(从 01
工作表步骤进度工作表,进度应用程序
断点工作表,断点工作表当工作表断点更改时,事件将被触发。作为第二个参数,它接收当前断点(从 01
工作表断点工作表,断点应用程序

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);
}

示例

sheet-modal.html
<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>