Діалог
Навігація
- Методи діалогового додатка
-
Параметри діалогуПараметри кнопки
- Методи та властивості діалогового вікна
-
Події в діалоговому вікніПодії DOM
Події екземплярів застосунку та діалогового вікна
-
Комбінації клавіш для діалогового вікнаПараметри ярликів діалогового вікна
Попередження
Підтвердження
Підказка
Логін
Пароль
Попередній завантажувач
Прогрес
- Змінні CSS
- Приклади
Діалог
Діалогове вікно – це невелика панель вмісту, яка з’являється над основним вмістом програми. Діалогові вікна зазвичай використовуються, щоб запитати щось у користувача або повідомити чи попередити користувача. Діалогове вікно, як і всі інші модальні елементи, є частиною так званих «Тимчасових переглядів».
Діалогове вікно можна відкрити лише за допомогою JavaScript. Отже, розгляньмо пов’язані методи роботи з діалоговими вікнами програми.
Методи діалогового додатка
Розгляньмо пов’язані методи роботи застосунку Dialog:
- Створити екземпляр Dialog:
app.dialog.create(parameters)parameters— object. Об'єкт з параметрами діалогового вікна.
- Знищити екземпляр Dialog:
app.dialog.destroy(el)el— HTMLElement | string (CSS-селектор) | object. Елемент діалогу або екземпляр діалогу для знищення.
- Отримати екземпляр Dialog:
app.dialog.get(el)el— HTMLElement | string (CSS-селектор). Елемент діалогу.
- Відкрити діалог:
app.dialog.open(el, animate)el— HTMLElement | string (CSS-селектор). Елемент діалогу для відкриття.animate— boolean. Відкрити діалогове вікно з анімацією.
- Закрити діалог:
app.dialog.close(el, animate)el— HTMLElement | string (CSS-селектор). Елемент діалогу для закриття.animate— boolean. Закрити діалогове вікно з анімацією.
Параметри діалогу
Тепер давайте подивимося на список доступних параметрів, необхідних для створення діалогу:
| Параметр | За замовчуванням | Опис | Тип |
|---|---|---|---|
el | Елемент діалогу. Може бути корисним, якщо у вашому HTML вже є елемент Dialog і ви хочете створити новий екземпляр за допомогою цього елемента | HTMLElement | string | |
containerEl | Дозволяє монтувати діалогове вікно до власного елемента, а не до кореневого елемента програми (app.el) | HTMLElement | string | |
backdrop | true | Вмикає фон діалогу (темний напівпрозорий шар позаду) | boolean |
closeByBackdropClick | false | Якщо ввімкнено, діалогове вікно закриватиметься після натискання фону | boolean |
animate | true | Чи відкривати/закривати діалогове вікно з анімацією чи ні. Може бути перезаписано в методах .open() і .close(). | boolean |
title | Назва діалогу | string | |
text | Внутрішній текст діалогу | string | |
content | Спеціальний вміст діалогового вікна, який слідує за текстом діалогового вікна. Може приймати будь-який вміст HTML | string | |
buttons | [] | Масив із діалоговими кнопками, де кожна кнопка є об’єктом із параметрами кнопки | array |
verticalButtons | false | Вмикає вертикальне розташування кнопок | boolean |
destroyOnClose | false | Якщо ввімкнено, діалогове вікно буде автоматично знищено після закриття | boolean |
onClick | Функція зворотного виклику, яка буде виконана після натискання кнопки діалогу. Як аргументи він отримав екземпляр діалогу та номер індексу натиснутої кнопки, | function(dialog, index) | |
cssClass | Додавання додаткового класу css | string |
| Параметр | Опис | Тип |
|---|---|---|
on | Об'єкт з обробниками подій. Наприклад: | object |
var dialog = app.dialog.create({
text: 'Hello World',
on: {
opened: function () {
console.log('Dialog opened')
}
}
})
Параметри кнопки
Кожна кнопка в масиві кнопок має бути представлена як об’єкт із параметрами кнопки:
| Параметр | За замовчуванням | Опис | Тип |
|---|---|---|---|
text | Рядок із текстом кнопки (може бути рядком HTML) | string | |
bold | false | Вмикає жирний текст кнопки | boolean |
color | Колір кнопки, один із кольорів за замовчуванням | string | |
close | true | Якщо ввімкнено, натискання кнопки закриє діалогове вікно | boolean |
cssClass | CSS клас додаткової кнопки | string | |
keyCodes | [] | Масив із кодами клавіш клавіатури, які використовуватимуться для ініціювання натискання кнопки. Наприклад, код клавіші 13 означає, що натискання кнопки буде активовано після натискання клавіші Enter | array |
onClick | Функція зворотного виклику, яка буде виконана після натискання цієї кнопки | function(dialog, e) |
Методи та властивості діалогового вікна
Отже, щоб створити діалог, ми повинні викликати:
var dialog = app.dialog.create({ /* parameters */ })Після цього у нас є його ініціалізований екземпляр (як діалогова
dialog змінна у прикладі вище) з корисними методами та властивостями::| Властивість | Опис | Тип |
|---|---|---|
dialog.app | Посилання на глобальний екземпляр застосунку | Techno4 (app) |
dialog.el | HTML-елемент діалогового вікна | HTMLElement |
dialog.$el | Екземпляр Dom64 з діалоговим елементом HTML | Dom64 |
dialog.backdropEl | Елемент HTML фону | HTMLElement |
dialog.$backdropEl | Екземпляр Dom64 із фоновим елементом HTML | Dom64 |
dialog.params | Параметри діалогу | object |
dialog.opened | Логічне значення, що вказує, відкрито діалогове вікно чи ні | boolean |
Методи
| Метод | Опис |
|---|---|
dialog.open(animate) | Відкрити діалог. Де
|
dialog.close(animate) | Закрити діалог. Де
|
dialog.setProgress(progress, duration) | Встановлює перебіг діалогу, коли використовується ярлик перебігу діалогу, де
|
dialog.setTitle(title) | Встановлює заголовок діалогу
|
dialog.setText(text) | Встановлює текст діалогу
|
dialog.destroy() | Знищити діалог |
dialog.on(event, handler) | Додати обробник подій |
dialog.once(event, handler) | Додати обробник подій, який буде видалено після запуску |
dialog.off(event, handler) | Видалити обробник подій |
dialog.off(event) | Видалити всі обробники для вказаної події |
dialog.emit(event, ...args) | запустити подію на примірнику |
Події в діалоговому вікні
Діалог запускатиме наступні події DOM в елементі діалогу та події в застосунку та екземплярі діалогу:
Події DOM
| Подія | Об'єкт | Опис | Тип події |
|---|---|---|---|
dialog:open | Dialog Element <div class="dialog"> | Подія буде ініційована, коли діалогове вікно розпочне свою початкову анімацію | Event |
dialog:opened | Dialog Element <div class="dialog"> | Подію буде запущено після того, як діалог завершить свою початкову анімацію | Event |
dialog:close | Dialog Element <div class="dialog"> | Подія буде ініційована, коли діалогове вікно почне завершувати анімацію | Event |
dialog:closed | Dialog Element <div class="dialog"> | Подію буде запущено після того, як діалогове вікно завершить свою анімацію закриття | Event |
dialog:beforedestroy | Dialog Element <div class="dialog"> | Подія буде запущена безпосередньо перед знищенням екземпляра Dialog | Event |
Події екземплярів програми та діалогового вікна
Екземпляр діалогового вікна випромінює події як у себе, так і в екземплярі застосунку . Події екземпляра застосунка мають однакові назви з діалоговим вікном.
dialog| Подія | Аргумент | Опис | Об'єкт |
|---|---|---|---|
open | dialog | Подія буде ініційована, коли діалогове вікно розпочне свою початкову анімацію. Як аргумент обробник події отримує екземпляр діалогу | dialog |
dialogOpen | dialog | Подія буде ініційована, коли діалогове вікно розпочне свою початкову анімацію. Як аргумент обробник події отримує екземпляр діалогу | app |
opened | dialog | Подію буде запущено після того, як діалог завершить свою початкову анімацію. Як аргумент обробник події отримує екземпляр діалогу | dialog |
dialogOpened | dialog | Подію буде запущено після того, як діалог завершить свою початкову анімацію. Як аргумент обробник події отримує екземпляр діалогу | app |
close | dialog | Подія буде ініційована, коли діалогове вікно почне завершувати анімацію. Як аргумент обробник події отримує екземпляр діалогу | dialog |
dialogClose | dialog | Подія буде ініційована, коли діалогове вікно почне завершувати анімацію. Як аргумент обробник події отримує екземпляр діалогу | app |
closed | dialog | Подію буде запущено після того, як діалогове вікно завершить свою анімацію закриття. Як аргумент обробник події отримує екземпляр діалогу | dialog |
dialogClosed | dialog | Подію буде запущено після того, як діалогове вікно завершить свою анімацію закриття. Як аргумент обробник події отримує екземпляр діалогу | app |
beforeDestroy | dialog | Подія буде запущена безпосередньо перед знищенням екземпляра Dialog. Як аргумент обробник події отримує екземпляр діалогу | dialog |
dialogBeforeDestroy | dialog | Подія буде запущена безпосередньо перед знищенням екземпляра Dialog. Як аргумент обробник події отримує екземпляр діалогу | app |
Комбінації клавіш для діалогового вікна
Є кілька методів швидкого доступу, які значно полегшують створення діалогових вікон.
Спочатку давайте перевіримо глобальні параметри програми, які допомагають налаштувати такі ярлики, а також використовуються для цілей локалізації.
Параметри ярликів діалогового вікна
Наступні глобальні параметри ярлика діалогового вікна можна передати під час ініціалізації програми у властивості діалогового вікна:
var app = new Techno4({
dialog: {
// встановити назву за замовчуванням для всіх ярликів діалогових вікон
title: 'My App',
// змінити стандартний текст кнопки "ОК".
buttonOk: 'Done',
...
}
});
| Параметр | За замовчуванням | Опис | Тип |
|---|---|---|---|
title | Заголовок ярликів діалогових вікон за замовчуванням. Якщо не вказано, дорівнюватиме app.name | string | |
buttonOk | OK | Текст кнопки "ОК" за замовчуванням | string |
buttonCancel | Cancel | Текст кнопки "Cancel" за замовчуванням | string |
usernamePlaceholder | Username | Заповнювач поля імені користувача за замовчуванням у діалоговому вікні входу | string |
passwordPlaceholder | Password | Заповнювач поля пароля за замовчуванням у діалогових вікнах імені та пароля | string |
preloaderTitle | Loading... | Назва за замовчуванням для діалогового вікна попереднього завантажувача | string |
progressTitle | Loading... | Назва за замовчуванням для діалогового вікна прогресу | string |
destroyPredefinedDialogs | true | Після закриття автоматично знищить усі попередньо визначені діалогові вікна (сповіщення, підтвердження, запит тощо). | boolean |
keyboardActions | true | Вмикає комбінації клавіш (Enter і Esc) клавіші для попередньо визначених діалогових вікон (Сповіщення, Підтвердження, Запит, Логін, Пароль) Кнопки «OK» і «Скасувати» | boolean |
autoFocus | true | Якщо ввімкнено, діалогове вікно автофокусу вводиться під час відкриття діалогового вікна. Діє лише для попередньо визначених діалогових вікон із такими введеннями, як запит, ім’я користувача та пароль | boolean |
Тепер розгляньмо доступні ярлики діалогового вікна:
Попередження
Щоб створити діалогове вікно попередження, нам потрібно використати такі методи програми:
Підтвердження
Діалог підтвердження зазвичай використовується, коли потрібно підтвердити якусь дію. Щоб відкрити модальне підтвердження, ми також повинні викликати один із таких методів програми:
- Діалог підтвердження з власною назвою:
app.dialog.confirm(text, title, callbackOk, callbackCancel)Повертає: створений екземпляр Dialog. - Діалог підтвердження за замовчуванням:
app.dialog.confirm(text, callbackOk, callbackCancel)Повертає: створений екземпляр Dialog.
Запит
Діалог запиту використовується, коли потрібно отримати якісь дані/відповідь від користувача. Щоб відкрити діалогове вікно запиту, ми також повинні викликати один із таких методів програми:
- Діалог запиту з власною назвою:
app.dialog.prompt(text, title, callbackOk, callbackCancel, defaultValue)Повертає: створений екземпляр Dialog. - Діалог запиту за замовчуванням:
app.dialog.prompt(text, callbackOk, callbackCancel, defaultValue)Повертає: створений екземпляр Dialog.
Логін
- Діалог входу (Login) з власною назвою:
app.dialog.login(text, title, callbackOk, callbackCancel)Повертає: створений екземпляр Dialog. - Діалог входу за замовчуванням:
app.dialog.login(text, callbackOk, callbackCancel)Повертає: створений екземпляр Dialog.
Пароль
Діалогове вікно пароля корисне, якщо вам потрібно запитати лише пароль:
- Діалог пароля з власною назвою:
app.dialog.password(text, title, callbackOk, callbackCancel)Повертає: створений екземпляр Dialog. - Діалог пароля за замовчуванням:
app.dialog.password(text, callbackOk, callbackCancel)Повертає: створений екземпляр Dialog.
Попередній завантажувач
Діалогове вікно попереднього завантаження використовується для вказівки певної фонової активності (наприклад, запиту Ajax) і блокування будь-яких дій користувача під час цієї діяльності. Щоб відкрити діалогове вікно Preloader, ми також повинні викликати відповідний метод App:
Прогрес
Те саме, що діалогове вікно попереднього завантажувача, але з панеллю прогресу
progressbar замість попереднього завантажувача.- Діалог індикатора прогресу (Progress):
app.dialog.progress(title, progress, color)Повертає: створений екземпляр Dialog.
Змінні CSS
Нижче наведено список пов’язаних змінних CSS (спеціальні властивості CSS).
Зауважте, що коментовані змінні не вказано за замовчуванням, і в цьому випадку вони повертаються до їхніх значень.
:root {
--t4-dialog-button-text-color: var(--t4-theme-color);
--t4-dialog-button-text-align: center;
--t4-dialog-input-bg-color: #fff;
}
:root .dark,
:root.dark {
--t4-dialog-text-color: #fff;
}
.ios {
--t4-dialog-box-shadow: none;
--t4-dialog-width: 270px;
--t4-dialog-inner-padding: 16px;
--t4-dialog-border-radius: 13px;
--t4-dialog-text-align: center;
--t4-dialog-font-size: 14px;
--t4-dialog-title-text-color: inherit;
--t4-dialog-title-font-size: 18px;
--t4-dialog-title-font-weight: 600;
--t4-dialog-title-line-height: inherit;
--t4-dialog-button-font-size: 17px;
--t4-dialog-button-height: 44px;
--t4-dialog-button-letter-spacing: 0;
--t4-dialog-button-font-weight: 400;
--t4-dialog-button-text-transform: none;
--t4-dialog-input-border-radius: 4px;
--t4-dialog-input-font-size: 14px;
--t4-dialog-input-height: 32px;
--t4-dialog-input-border-width: 1px;
--t4-dialog-input-placeholder-color: #a9a9a9;
--t4-dialog-preloader-size: 34px;
--t4-dialog-bg-color: rgba(255, 255, 255, 0.95);
--t4-dialog-bg-color-rgb: 255, 255, 255;
--t4-dialog-text-color: #000;
--t4-dialog-button-pressed-bg-color: rgba(0, 0, 0, 0.1);
--t4-dialog-input-border-color: rgba(0, 0, 0, 0.3);
--t4-dialog-border-divider-color: rgba(0, 0, 0, 0.2);
}
.ios .dark,
.ios.dark {
--t4-dialog-bg-color: rgba(45, 45, 45, 0.95);
--t4-dialog-bg-color-rgb: 45, 45, 45;
--t4-dialog-button-pressed-bg-color: rgba(0, 0, 0, 0.2);
--t4-dialog-border-divider-color: rgba(255, 255, 255, 0.15);
--t4-dialog-input-border-color: rgba(255, 255, 255, 0.15);
--t4-dialog-input-bg-color: rgba(0, 0, 0, 0.5);
}
.md {
--t4-dialog-box-shadow: var(--t4-elevation-24);
--t4-dialog-width: 280px;
--t4-dialog-inner-padding: 24px;
--t4-dialog-border-radius: 4px;
--t4-dialog-text-align: left;
--t4-dialog-font-size: 16px;
--t4-dialog-title-font-size: 20px;
--t4-dialog-title-font-weight: 500;
--t4-dialog-title-line-height: 1.3;
--t4-dialog-button-font-size: 14px;
--t4-dialog-button-height: 36px;
--t4-dialog-button-letter-spacing: 0.05em;
--t4-dialog-button-font-weight: 500;
--t4-dialog-button-text-transform: uppercase;
--t4-dialog-button-pressed-bg-color: rgba(var(--t4-theme-color-rgb), 0.15);
--t4-dialog-input-border-radius: 0px;
--t4-dialog-input-font-size: 16px;
--t4-dialog-input-height: 36px;
--t4-dialog-input-border-color: transparent;
--t4-dialog-input-border-width: 0px;
--t4-dialog-preloader-size: 32px;
--t4-dialog-bg-color: #fff;
--t4-dialog-text-color: rgba(0, 0, 0, 0.54);
--t4-dialog-title-text-color: #212121;
--t4-dialog-input-placeholder-color: rgba(0, 0, 0, 0.35);
}
.md .dark,
.md.dark {
--t4-dialog-bg-color: #1c1c1d;
--t4-dialog-title-text-color: #fff;
--t4-dialog-input-bg-color: transparent;
--t4-dialog-input-placeholder-color: rgba(255, 255, 255, 0.54);
}
.aurora {
--t4-dialog-box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.15), 0 25px 30px 0 rgba(0,0,0,0.35);
--t4-dialog-width: 300px;
--t4-dialog-inner-padding: 20px;
--t4-dialog-border-radius: 8px;
--t4-dialog-text-align: left;
--t4-dialog-font-size: 14px;
--t4-dialog-title-font-size: 18px;
--t4-dialog-title-font-weight: 700;
--t4-dialog-title-line-height: inherit;
--t4-dialog-button-font-size: 14px;
--t4-dialog-button-height: 36px;
--t4-dialog-button-letter-spacing: 0;
--t4-dialog-button-font-weight: 600;
--t4-dialog-button-text-transform: uppercase;
/*
--t4-dialog-button-pressed-bg-color: var(--t4-theme-color-shade);
--t4-dialog-button-hover-bg-color: var(--t4-theme-color-tint);
*/
--t4-dialog-input-border-radius: 8px;
--t4-dialog-input-font-size: 16px;
--t4-dialog-input-height: 32px;
--t4-dialog-input-border-width: 1px;
--t4-dialog-preloader-size: 24px;
--t4-dialog-bg-color: #fff;
--t4-dialog-title-text-color: inherit;
--t4-dialog-text-color: #000;
--t4-dialog-button-text-color: #fff;
--t4-dialog-input-border-color: rgba(0, 0, 0, 0.2);
--t4-dialog-input-placeholder-color: rgba(0, 0, 0, 0.32);
}
.aurora .dark,
.aurora.dark {
--t4-dialog-bg-color: #1c1c1d;
--t4-dialog-title-text-color: #fff;
--t4-dialog-input-bg-color: rgba(0, 0, 0, 0.25);
--t4-dialog-input-placeholder-color: rgba(255, 255, 255, 0.54);
--t4-dialog-input-border-color: rgba(255, 255, 255, 0.15);
}
Приклади
<template>
<div class="page">
<div class="navbar">
<div class="navbar-bg"></div>
<div class="navbar-inner">
<div class="title">Dialog</div>
</div>
</div>
<div class="page-content">
<div class="block block-strong">
<p class="row">
<button class="col button button-fill open-alert">Alert</button>
<button class="col button button-fill open-confirm">Confirm</button>
<button class="col button button-fill open-prompt">Prompt</button>
</p>
<p class="row">
<button class="col button button-fill open-login">Login</button>
<button class="col button button-fill open-password">Password</button>
</p>
</div>
<div class="block-title">Vertical Buttons</div>
<div class="block block-strong">
<p>
<button class="button button-fill open-vertical">Vertical Buttons</button>
</p>
</div>
<div class="block-title">Preloader Dialog</div>
<div class="block block-strong">
<p class="row">
<button class="col button button-fill open-preloader">Preloader</button>
<button class="col button button-fill open-preloader-custom">Custom Title</button>
</p>
</div>
<div class="block-title">Progress Dialog</div>
<div class="block block-strong">
<p class="row">
<button class="col button button-fill open-progress">Determined</button>
<button class="col button button-fill open-progress-infinite">Infinite</button>
</p>
</div>
</div>
</div>
</template>
<script>
export default (props, { $, $t4, $on }) => {
$on('pageInit', () => {
// Alert
$('.open-alert').on('click', function () {
$t4.dialog.alert('Hello');
});
// Confirm
$('.open-confirm').on('click', function () {
$t4.dialog.confirm('Are you feel good today?', function () {
$t4.dialog.alert('Great!');
});
});
// Prompt
$('.open-prompt').on('click', function () {
$t4.dialog.prompt('What is your name?', function (name) {
$t4.dialog.confirm('Are you sure that your name is ' + name + '?', function () {
$t4.dialog.alert('Ok, your name is ' + name);
});
});
});
// Login
$('.open-login').on('click', function () {
$t4.dialog.login('Enter your username and password', function (username, password) {
$t4.dialog.alert('Thank you!<br>Username:' + username + '<br>Password:' + password);
});
});
// Password
$('.open-password').on('click', function () {
$t4.dialog.password('Enter your password', function (password) {
$t4.dialog.alert('Thank you!<br>Password:' + password);
});
});
// Vertical Buttons
$('.open-vertical').on('click', function () {
$t4.dialog.create({
title: 'Vertical Buttons',
text: 'Dialog with vertical buttons',
buttons: [
{
text: 'Button 1',
},
{
text: 'Button 2',
},
{
text: 'Button 3',
},
],
verticalButtons: true,
}).open();
});
// Preloader
$('.open-preloader').on('click', function () {
$t4.dialog.preloader();
setTimeout(function () {
$t4.dialog.close();
}, 3000);
});
// Preloader with custom text
$('.open-preloader-custom').on('click', function () {
$t4.dialog.preloader('My text...');
setTimeout(function () {
$t4.dialog.close();
}, 3000);
});
// Progress
$('.open-progress').on('click', function () {
var progress = 0;
var dialog = $t4.dialog.progress('Loading assets', progress);
dialog.setText('Image 1 of 10');
var interval = setInterval(function () {
progress += 10;
dialog.setProgress(progress);
dialog.setText('Image ' + ((progress) / 10) + ' of 10');
if (progress === 100) {
clearInterval(interval);
dialog.close();
}
}, 300)
});
// Progress Infinite
$('.open-progress-infinite').on('click', function () {
$t4.dialog.progress();
setTimeout(function () {
$t4.dialog.close();
}, 3000);
});
})
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