シートモーダル
シートモーダルは、ピッカー/カレンダーのオーバーレイに似た特別なオーバーレイタイプです。このようなモーダルを使用すると、カスタムコンテンツを持つカスタムオーバーレイを作成できます
シートレイアウト
シートレイアウトは非常にシンプルです
<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 - HTMLElement または string(CSSセレクター付き)または object。破棄するシート要素またはシートインスタンス。
app.sheet.get(el)- HTML要素でシートインスタンスを取得
- el - HTMLElement または string(CSSセレクター付き)。シート要素。
メソッドはシートのインスタンスを返します
app.sheet.open(el, animate)- シートを開く
- el - HTMLElement または string(CSSセレクター付き)。開くシート要素。
- animate - boolean。アニメーションでシートを開きます。
メソッドはシートのインスタンスを返します
app.sheet.close(el, animate)- シートを閉じる
- el - HTMLElement または string(CSSセレクター付き)。閉じるシート要素。
- animate - boolean。アニメーションでシートを閉じます。
メソッドはシートのインスタンスを返します
app.sheet.stepOpen(el)- シートのスワイプステップを開く/展開
- el - HTMLElement または string(CSSセレクター付き)。スワイプステップを開くシート要素。
メソッドはシートのインスタンスを返します
app.sheet.stepClose(el)- シートのスワイプステップを閉じる/折りたたむ
- el - HTMLElement または string(CSSセレクター付き)。スワイプステップを閉じるシート要素。
メソッドはシートのインスタンスを返します
app.sheet.stepToggle(el)- シートのスワイプステップを切り替える(開くまたは閉じる)
- el - HTMLElement または string(CSSセレクター付き)。スワイプステップを切り替えるシート要素。
メソッドはシートのインスタンスを返します
app.sheet.setBreakpoint(el, value)- 特定のブレークポイント(`breakpoints`配列パラメータから)でシートモーダルを設定/開きます。また、`0`を渡すとシートモーダルが閉じ、`1`を渡すと完全に開きます
メソッドはシートのインスタンスを返します
シートパラメータ
シートを作成するために必要な利用可能なパラメータのリストを見てみましょう
パラメータ | タイプ | デフォルト | 説明 |
---|---|---|---|
el | HTMLElement | シート要素。すでにHTMLにシート要素があり、この要素を使用して新しいインスタンスを作成する場合に便利です | |
content | string | 完全なシートHTMLレイアウト文字列。シート要素を動的に作成する場合に便利です | |
backdrop | boolean | シートの背景(背後の暗い半透明のレイヤー)を有効にします。デフォルトでは、MDテーマでは`true`、iOSテーマでは`false`です | |
backdropEl | HTMLElement string | カスタム背景要素のHTML要素または文字列CSSセレクター | |
backdropUnique | boolean | false | 有効にすると、このモーダル専用のユニークな背景要素が作成されます |
scrollToEl | HTMLElement string | 要素のHTML要素または文字列(CSSセレクター付き)。指定した場合、シートは開いたときにページコンテンツをこの要素までスクロールしようとします | |
closeByBackdropClick | boolean | true | 有効にすると、背景クリックで閉じられます |
closeByOutsideClick | boolean | false | 有効にすると、外部をクリックしたときに閉じられます |
closeOnEscape | boolean | false | 有効にすると、ESCキーを押したときに閉じられます |
animate | boolean | true | シートをアニメーションで開閉するかどうか。`.open()`および`.close()`メソッドで上書きできます |
swipeToClose | boolean | false | シートをスワイプジェスチャーで閉じることができるかどうか |
swipeToStep | boolean | false | 有効にすると、開いたシートを2つの状態に分割できます:部分的に開いた状態と完全に開いた状態。スワイプで制御できます |
swipeHandler | HTMLElement string | 渡されない場合、シート全体をスワイプして閉じることができます。ここに、スワイプターゲットとして使用されるカスタム要素のHTML要素または文字列CSSセレクターを渡すことができます。(`swipeToClose`または`swipeToStep`も有効にする必要があります) | |
push | boolean | false | 有効にすると、開いたときに背後のビューがプッシュされます。トップセーフエリアが配置されている場合にのみ機能します。シート要素に`sheet-modal-push`クラスを追加することでも有効にできます。 |
breakpoints | number[] | [] | スワイプブレークポイントを有効にするには、`swipeToStep`の代わりに使用します。0が完全に閉じられ、1が完全に開いた状態である、0より大きく1より小さい数値の配列である必要があります。例:`[0.33, 0.66]`、`[0.5]`など。 |
backdropBreakpoint | number | 0 | 背景が表示されるブレークポイントを定義します。`0`(理想的には、`breakpoints`配列の最小(最初)の値から)から`1`までの数値(デフォルトは0) |
pushBreakpoint | number | 0 | 背後のビューをプッシュするタイミングのブレークポイントを定義します(`push`を有効にする必要があります)。`0`(理想的には、`breakpoints`配列の最小(最初)の値から)から`1`までの数値(デフォルトは0) |
containerEl | HTMLElement string | モーダルをマウントする要素(デフォルトはアプリのルート要素) | |
on | object | イベントハンドラーを持つオブジェクト。例:
|
次のすべてのパラメータは、すべてのシートのデフォルトを設定するために、`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) | シートを開きます。ここで
|
sheet.close(animate) | シートを閉じます。ここで
|
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にある場合)を開閉できます
シートを開くには、「sheet-open」クラスを任意のHTML要素(リンクが推奨)に追加する必要があります
シートを閉じるには、「sheet-close」クラスを任意のHTML要素(リンクが推奨)に追加する必要があります
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イベント
イベント | ターゲット | 説明 |
---|---|---|
sheet:open | シート要素<div class="sheet"> | シートの開くアニメーションが開始されるときにトリガーされます。 |
sheet:opened | シート要素<div class="sheet"> | シートの開くアニメーションが完了した後にトリガーされます。 |
sheet:close | シート要素<div class="sheet"> | シートの閉じるアニメーションが開始されるときにトリガーされます。 |
sheet:closed | シート要素<div class="sheet"> | シートの閉じるアニメーションが完了した後にトリガーされます。 |
sheet:stepopen | シート要素<div class="sheet"> | シートのスワイプステップの開閉/展開時にトリガーされます。 |
sheet:stepclose | シート要素<div class="sheet"> | シートのスワイプステップの閉じる/折りたたみ時にトリガーされます。 |
sheet:stepprogress | シート要素<div class="sheet"> | シートのスワイプステップが開閉状態の間で遷移するときにトリガーされます。event.detail として、ステップの開く進行状況の数値(0 から 1 )を受け取ります。 |
sheet:breakpoint | シート要素<div class="sheet"> | シートのスワイプステップが開閉状態の間で遷移するときにトリガーされます。event.detail として、ステップの開く進行状況の数値(0 から 1 )を受け取ります。 |
sheet:beforedestroy | シート要素<div class="sheet"> | シートのブレークポイントが変更されたときにトリガーされます。event.detail として、現在のブレークポイント(0 から 1 )を受け取ります。 |
アプリとシートインスタンスのイベント
シートインスタンスは、自身のインスタンスとアプリインスタンスの両方でイベントを発生させます。アプリインスタンスのイベントは、popup
というプレフィックスが付いた同じ名前を持ちます。
イベント | 引数 | ターゲット | 説明 |
---|---|---|---|
open | sheet | sheet | シートの開くアニメーションが開始されるときにトリガーされます。イベントハンドラーは、引数としてシートインスタンスを受け取ります。 |
sheetOpen | sheet | app | |
opened | sheet | sheet | シートの開くアニメーションが完了した後にトリガーされます。イベントハンドラーは、引数としてシートインスタンスを受け取ります。 |
sheetOpened | sheet | app | |
close | sheet | sheet | シートの閉じるアニメーションが開始されるときにトリガーされます。イベントハンドラーは、引数としてシートインスタンスを受け取ります。 |
sheetClose | sheet | app | |
closed | sheet | sheet | シートの閉じるアニメーションが完了した後にトリガーされます。イベントハンドラーは、引数としてシートインスタンスを受け取ります。 |
sheetClosed | sheet | app | |
beforeDestroy | sheet | sheet | シートインスタンスが破棄される直前にトリガーされます。イベントハンドラーは、引数としてシートインスタンスを受け取ります。 |
sheetBeforeDestroy | sheet | app | |
stepOpen | sheet | sheet | シートのスワイプステップの開閉/展開時にトリガーされます。 |
sheetStepOpen | sheet | app | |
stepClose | sheet | sheet | シートのスワイプステップの閉じる/折りたたみ時にトリガーされます。 |
sheetStepClose | sheet | app | |
stepProgress | sheet,progress | sheet | シートのスワイプステップが開閉状態の間で遷移するときにトリガーされます。progress として、ステップの開く進行状況の数値(0 から 1 )を受け取ります。 |
sheetStepProgress | sheet,progress | app | |
breakpoint | sheet,breakpoint | sheet | シートのブレークポイントが変更されたときにトリガーされます。2番目の引数として、現在のブレークポイント(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>