Модальний аркуш
Навігація
-
Макет модального аркушаМакет модального аркуша в позиції “Top”
- Методи застосунку Модальний аркуш
- Параметри Модального аркуша
- Методи та властивості модального аркуша
- Контрольний аркуш із посиланням
- Крок свайпа
-
Події модального аркушаПодії DOM
Події екземплярів застосунку та модального аркуша
- Змінні CSS
- Приклади
Модальний аркуш
Модальний аркуш — це спеціальний тип накладення, подібний до накладання вибору/календаря. Такий режим дозволяє створювати налаштовані накладки з настроюваним вмістом
Макет модального аркуша
Розмітка аркуша досить проста:
<body>
...
<!-- Контейнер модального аркуша -->
<div class="sheet-modal">
<!-- Панель інструментів модального аркуша, опціонально-->
<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>
<!-- Inner Модального аркуша-->
<div class="sheet-modal-inner">
<!-- Вміст Модального аркуша-->
<div class="block">
<p>Integer mollis nulla id nibh elementum finibus...</p>
</div>
</div>
</div>
</body>
Макет модального аркуша в позиції “Top”
За замовчуванням режим аркуша відкривається з нижньої частини екрана. Його також можна відкрити з верхньої частини екрана. У цьому випадку нам потрібно додати клас
sheet-modal-top до елемента аркуша. У цьому випадку також рекомендується використовувати нижню панель інструментів:
<!-- Додатковий клас "sheet-modal-top" шоб відкрити його у верхній частині екрану-->
<div class="sheet-modal sheet-modal-top">
<!-- Панель інструментів знизу для аркуша зверху-->
<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>
<!-- Inner Модального аркуша -->
<div class="sheet-modal-inner">
<!-- Вміст модально аркуша -->
<div class="block">
<p>Integer mollis nulla id nibh elementum finibus...</p>
</div>
</div>
</div>
Методи застосунку Модальний аркуш
Давайте розглянемо методи роботи пов’язані з Модальним аркушем:
| Метод | Опис |
|---|---|
app.sheet.create( parameters) | створити екземпляр Модального аркуша
|
app.sheet.destroy( el) | знищити екземпляр Модального аркуша
|
app.sheet.get( el) | отримати екземпляр Модального аркуша за елементом HTML
|
app.sheet.open( panel, animate) | Відкриває модальний аркуш
|
app.sheet.close( el, animate) | закириває модальний аркуш
|
app.sheet.stepOpen( el) | відкрити/розгорнути крок гортання аркуша
|
app.sheet.stepClose( el) | закрити/згорнути крок аркуша
|
app.sheet.stepToggle( el) | перемикати (відкрити або закрити) крок гортання аркуша
|
app.sheet.setBreakpoint( el, value) | встановити/відкрити модальний аркуш на певній точці зупину (параметра з масиву breakpoints)
Також проходження 0 закриє аркуш, проходження 1 повністю відкриє його.
Метод повертає екземпляр Модального аркуша |
Параметри Модального аркуша
Тепер давайте подивимося на список доступних параметрів, необхідних для створення аркуша:
| Параметр | За замовчуванням | Опис | Тип |
|---|---|---|---|
el | Елемент Модального аркуша. Може бути корисним, якщо у вас уже є елемент Sheet у вашому HTML і ви хочете створити новий екземпляр за допомогою цього елемента | HTMLElement string | |
content | Рядок макета HTML повного аркуша. Може бути корисним, якщо ви хочете динамічно створити елемент аркуша | string | |
backdrop | Вмикає фон аркуша (темний напівпрозорий шар позаду). За замовчуванням це trueдля теми MD і false для iOS теми | boolean | |
backdropEl | HTML-елемент або рядковий CSS-селектор спеціального елемента фону | HTMLElement string | |
backdropUnique | false | Якщо ввімкнено, він створює унікальний елемент фону виключно для цього модалу | boolean |
scrollToEl | Елемент HTML або рядок (із селектором CSS) елемента. Якщо вказано, аркуш намагатиметься прокрутити вміст сторінки до цього елемента під час відкриття | HTMLElement string | |
closeByBackdropClick | true | Якщо ввімкнено, буде закрито після натискання фону | boolean |
closeByOutsideClick | false | Якщо ввімкнено, буде закрито, якщо клікнути поза ним | boolean |
closeOnEscape | false | Якщо ввімкнено, буде закрито після натискання клавіші ESC на клавіатурі | boolean |
animate | true | Чи відкривати/закривати аркуш з анімацією чи ні. Можна перезаписати в методи .open() і .close() | boolean |
swipeToClose | false | Чи можна закрити аркуш за допомогою свайпу | boolean |
swipeToStep | false | Якщо ввімкнено, відкритий аркуш можна буде розділити на два стани: частково відкритий і повністю відкритий, яким можна керувати за допомогою свайпа
| boolean |
swipeHandler | Якщо не передано, можна закрити весь аркуш. Ви можете передати сюди HTML-елемент або рядок CSS-селектора спеціального елемента, який використовуватиметься як ціль гортання. (також має бути ввімкнено swipeToClose або swipeToStep) | HTMLElement string | |
push | false | Якщо ввімкнути, він відкриватиме перегляд ззаду. Працює лише тоді, коли знаходиться верхня безпечна зона. Його також можна ввімкнути, додавши клас sheet-modal-push до елемента Sheet. | boolean |
breakpoints | [] | Використовуйте замість swipeToStep, щоб увімкнути контрольні точки. Має бути масив чисел > 0 і < 1, де 0 повністю закрито, а 1 повністю відкрито, наприклад. [0,33, 0,66], [0,5] тощо. | number |
backdropBreakpoint | 0 | Визначає точку зупинки, коли фон стає видимим. Число від 0 (в ідеалі від найнижчого (першого) значення масиву контрольних точок) до 1 (за замовчуванням 0) | number |
pushBreakpoint | 0 | Визначає точку зупинки, коли потрібно відштовхнути огляд позаду (натискання має бути ввімкнено). Число від 0 (в ідеалі від найнижчого (першого) значення масиву контрольних точок) до 1 (за замовчуванням 0) | number |
containerEl | Елемент для модального монтування (за замовчуванням кореневий елемент програми) | HTMLElement string |
| Параметр | Опис | Тип |
|---|---|---|
on | Об'єкт з обробниками подій. Наприклад: | object |
var sheet = app.sheet.create({
content: '<div class="sheet-modal">...</div>',
on: {
opened: function () {
console.log('Sheet opened')
}
}
})
Зауважте, що всі наведені нижче параметри можна використовувати в глобальних параметрах програми у властивості
sheet, щоб встановити значення за замовчуванням для всіх аркушів. Наприклад:
var app = new Techno4({
sheet: {
closeByBackdropClick: false,
}
});
Якщо ви використовуєте автоматично ініціалізовані модальні аркуші (наприклад, ви не створюєте їх через
app.sheet.create), можна передати всі доступні параметри аркуша через data-атрибути. Наприклад:
<!-- Передайте параметри як атрибути даних kebab-case -->
<div class="sheet-modal" data-close-on-escape="true" data-swipe-to-close="true">
...
</div>
Методи та властивості аркуша
Отже, щоб створити модальний аркуш, ми повинні викликати:
var sheet = app.sheet.create({ /* параметри */ })Після цього у нас є його ініціалізований екземпляр (як змінна
sheet у прикладі вище) з корисними методами та властивостями:Властивості
| Властивість | Опис |
|---|---|
sheet.app | Посилання на глобальний екземпляр застосунку |
sheet.el | HTML Елемент аркуша |
sheet.$el | Екземпляр Dom64 з HTML елементом аркуша |
sheet.backdropEl | Елемент HTML фону |
sheet.$backdropEl | Екземпляр Dom64 із фоновим елементом HTML |
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 (бажано для посилання)
data-sheet=".my-sheet"у цьому елементі HTML
Відповідно до примітки вище:
<!-- В атрибуті data-sheet ми вказуємо CSS-селектор аркуша, який потрібно відкрити -->
<p><a href="#" data-sheet=".my-sheet" class="sheet-open">Open Sheet</a></p>
<!-- І десь у DOM -->
<div class="sheet-modal my-sheet">
<div class="sheet-modal-inner">
<!-- Посилання на закриття аркуша -->
<a class="link sheet-close">Close</a>
</div>
</div>
Крок свайпа
Якщо передати параметр
swipeToStep , то аркуш буде відкритий частково, а за допомогою свайпа його можна буде розгорнути. Щоб це запрацювало, нам також потрібно визначити цей перший/початковий крок у HTML аркуша, щоб Techno4 Framework міг знати, на скільки аркушів слід відкрити.
Щоб це запрацювало, нам потрібно обернути початковий вміст аркуша елементом <div class="sheet-modal-swipe-step">і встановити height:auto для цього аркуша:
<div class="sheet-modal" style="height: auto">
<div class="sheet-modal-inner">
<!-- початковий вміст модального аркуша -->
<div class="sheet-modal-swipe-step">
...
</div>
<!-- решту вмісту, який відкриватиметься додатковим свайпом -->
...
</div>
</div>
Для верхнього режиму аркуша цей крок свайпу має бути внизу:
<div class="sheet-modal sheet-modal-top" style="height: auto">
<div class="sheet-modal-inner">
<!-- решту вмісту, який відкриватиметься додатковим свайпом -->
...
<!-- початковий вміст модального аркуша -->
<div class="sheet-modal-swipe-step">
...
</div>
</div>
</div>
Події модального аркуша
Модальний аркуш запускатиме такі події DOM для елемента аркуша та події для застосунку та екземпляра аркуша:
Події DOM
| Подія | Об'єкт | Опис |
|---|---|---|
sheet:open | Елемент аркуша
| Подія буде ініційована, коли Аркуш запустить початкову анімацію |
sheet:opened | Елемент аркуша
| Подію буде ініційовано після того, як аркуш завершить свою початкову анімацію |
sheet:close | Елемент аркуша
| Подія буде ініційована, коли аркуш розпочне свою анімацію закриття |
sheet:closed | Елемент аркуша
| Подію буде запущено після завершення анімації закриття Аркуша |
sheet:stepopen | Елемент аркуша
| Подія буде ініційована під час відкриття/розгортання аркуша |
sheet:stepclose | Елемент аркуша
| Подія буде ініційована під час закриття/згортання аркуша |
sheet:stepprogress | Елемент аркуша
| Подія буде ініційована на етапі гортання аркуша між відкритим і закритим кроком. Коли event.detail він отримує номер прогресу відкриття кроку ( від 0 до 1)
|
sheet:breakpoint | Елемент аркуша
| Подія буде ініційована на етапі гортання аркуша між відкритим і закритим кроком. Коли event.detail він отримує номер прогресу відкриття кроку ( від 0 до 1)
|
sheet:beforedestroy | Елемент аркуша
| Подія буде ініційована при зміні точки зупину аркуша. Оскільки 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 | Подія буде ініційована на етапі гортання аркуша між відкритим і закритим кроком. В якості "progress" він отримує номер прогресу відкриття кроку ( від 0 до 1) | sheet |
sheetStepProgress | sheet, progress | Подія буде ініційована на етапі гортання аркуша між відкритим і закритим кроком. В якості "progress" він отримує номер прогресу відкриття кроку ( від 0 до 1) | app |
breakpoint | sheet, breakpoint | Подія буде ініційована при зміні точки зупину аркуша. Як другий аргумент він отримує поточну точку зупину (від 0 до 1) | sheet |
sheetBreakpoint | sheet, breakpoint | Подія буде ініційована при зміні точки зупину аркуша. Як другий аргумент він отримує поточну точку зупину (від 0 до 1) | app |
Змінні CSS
Нижче наведено список пов’язаних змінних CSS (спеціальні властивості CSS).
:root {
--t4-sheet-height: 260px;
--t4-sheet-push-offset: var(--t4-safe-area-top);
}
.ios {
--t4-sheet-border-radius: 0px;
--t4-sheet-border-color: var(--t4-bars-border-color);
--t4-sheet-transition-timing-function: initial;
--t4-sheet-push-border-radius: 10px;
--t4-sheet-transition-duration: 300ms;
--t4-sheet-bg-color: #fff;
}
.ios .dark,
.ios.dark {
--t4-sheet-bg-color: #202020;
}
.md {
--t4-sheet-border-radius: 16px;
--t4-sheet-push-border-radius: 16px;
--t4-sheet-border-color: transparent;
--t4-sheet-transition-timing-function: cubic-bezier(0, 0.8, 0.34, 1);
--t4-sheet-transition-duration: 400ms;
}
.md,
.md .dark,
.md [class*='color-'] {
--t4-sheet-bg-color: var(--t4-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, { $t4, $on }) => {
let sheet;
let sheetPush;
let sheetSwipeToClose;
let sheetSwipeToStep;
let sheetBreakpoints;
const toggleSwipeStep = () => {
sheetSwipeToStep.stepToggle();
}
const createSheet = () => {
// Створити модальний аркуш
if (!sheet) {
sheet = $t4.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>\
'
});
}
// Закрити вбудований аркуш
if ($('.demo-sheet.modal-in').length > 0) $t4.sheet.close('.demo-sheet');
// Відкрити його
sheet.open();
}
$on('pageInit', () => {
sheetPush = $t4.sheet.create({
el: '.demo-sheet-push',
push: true,
backdrop: true,
});
sheetSwipeToClose = $t4.sheet.create({
el: '.demo-sheet-swipe-to-close',
swipeToClose: true,
push: true,
backdrop: true,
});
sheetSwipeToStep = $t4.sheet.create({
el: '.demo-sheet-swipe-to-step',
swipeToClose: true,
swipeToStep: true,
push: true,
backdrop: true,
});
sheetBreakpoints = $t4.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', () => {
// Закрийте відкриті аркуші на сторінці
$t4.sheet.close();
});
$on('pageBeforeRemove', () => {
// Знищити модальний аркуш, коли сторінку видалено
if (sheet) sheet.destroy();
if (sheetPush) sheetPush.destroy();
if (sheetSwipeToClose) sheetSwipeToClose.destroy();
if (sheetSwipeToStep) sheetSwipeToStep.destroy();
if (sheetBreakpoints) sheetBreakpoints.destroy();
});
return $render;
};
</script>
- TECHNO4 FRAMEWORK2
- Get Started
- Boonker
- Installation
- Package Structure
- App HTML Layout
- RTL Layout
- Initialize App
- Events
- Router Component
- Routes
- Store
- App/Core
- Accordion/Collapsible
- Action Sheet
- Area chart
- Autocomplete
- Badge
- Block/Content Block
- Breadcrumbs
- Button
- Calendar/Date Picker
- Cards
- Checkbox
- Chips
- Color Picker
- Contact List
- Data Table
- Dialog
- Floating action button
- Form
- Gauge
- Icons
- Inputs / Form Inputs
- Grid /Layout Grid
- Link
- List Button
- List View
- List Index
- Login Screen
- Menu List
- Messagebar
- Navbar
- Messages
- Notification
- Panel/Side Panels
- Photo Browser
- Picker
- Pie Chart
- Popover
- Popup
- Preloader
- Progressbar
- Pull to Refresh
- Radio
- Range Slider
- Searchbar
- Segmented
- Sheet Modal
- Skeleton
- Introduction
- Page
- Infinite Scroll
- Tabs
- Swiper
- Smart Select
- Sortable List
- Statusbar
- Stepper
- Subnavbar
- Swipeout
- Text Editor
- Timeline
- Toast
- Toggle
- Toolbar & Tabbar
- Tooltip
- Touch Ripple
- Treeview
- Virtual List
- Elevation
- Apache Cordova Integration
- Hardware: Web Audio API & Synth
- Hardware: Web MIDI Inspector
- Hardware: Web Serial UART Terminal
- Threads Studio: Visual Workflows
- Techno4 CLI: Scaffolding Reference
- DOM64: Selector Engine
- Rollup & Vite Component Compiler
- Початок роботи
- Techno4 Total
- Threads Components
- Types